I'm use generic collection in my code:
List<Type>
what I really want is to get type-safe collection of types with defined basetype
something like List<typeof(BaseType)>, but valid :)
I'm use generic collection in my code:
List<Type>
what I really want is to get type-safe collection of types with defined basetype
something like List<typeof(BaseType)>, but valid :)
您不能创建Type描述从基类型派生的类型的类型安全对象集合,因为 C# 的类型安全泛型机制只能对编译时已知的类型进行操作,而 atypeof(MyBaseType)和 a之间的关系typeof(MyDerivedType)仅是已知的在运行时。
此外,您必须记住,这些Type对象之间的关系实际上并不是继承关系。string可能源自object,但typeof(string)不源自typeof(object)。因此,虽然他们的关系似乎与类型安全有关,但实际上并非如此。
Type就类型安全而言,特定类型的子类型对象的集合仅等效于偶数编号int的集合——它与类型安全无关,因此很难用泛型实现。
我不确定您是否真的了解 a 的Type真正含义。
Typetypeof(TDerived)是一个描述运行时类型(它是字段、属性、方法、事件等)的类,但除此之外,和之间的类型没有真正的区别typeof(TBase)。
如果您只想要一个可以存储对两者TBase和TDerived实例的引用的列表 - 您可以简单地声明:
List<TBase> myList;
如果您只想要一个存储对Type实例的引用的列表 - 您只需List<Type>像已经完成的那样声明 a - 在此列表中您可以放置任何Type引用 - 例如typeof(int),typeof(TBase)等等。