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
真正含义。
Type
typeof(TDerived)
是一个描述运行时类型(它是字段、属性、方法、事件等)的类,但除此之外,和之间的类型没有真正的区别typeof(TBase)
。
如果您只想要一个可以存储对两者TBase
和TDerived
实例的引用的列表 - 您可以简单地声明:
List<TBase> myList;
如果您只想要一个存储对Type
实例的引用的列表 - 您只需List<Type>
像已经完成的那样声明 a - 在此列表中您可以放置任何Type
引用 - 例如typeof(int)
,typeof(TBase)
等等。