在创建值之前,我可以获取Lazy值的类型吗



假设我有一个类"MyClass";具有按以下方式设置的私有列表属性:

List = new List<Lazy<BaseClass>> {
new Lazy<BaseClass>(() => new DerivedClassA(x)),
new Lazy<BaseClass>(() => new DerivedClassB(x, y)),
new Lazy<BaseClass>(() => new DerivedClassC())
};

和同一类上的一个方法:

public void OpenTab<T>();

我想这样称呼它:

myClassObject.OpenTab<DerivedClassA>();

然后,它将使用创建该类型的List中的惰性实例的值在MyClass中设置一个属性。

有没有一种方法可以使用OpenTab中的类型参数来确保我从创建指定类型值的惰性实例列表中创建值?

没有,但您可以将它们存储在Dictionary<Type, Lazy<Type>>

List = new Dictionary<Type, Lazy<BaseClass>> {
[typeof(DerivedClassA)] = new Lazy<BaseClass>(() => new DerivedClassA(x)),
[typeof(DerivedClassB)] = new Lazy<BaseClass>(() => new DerivedClassB(x, y)),
[typeof(DerivedClassC)] = new Lazy<BaseClass>(() => new DerivedClassC())
};
public void OpenTab<T>()
{
var instance = List[typeof(T)].Value;
// Do whatever
}

最新更新