我在我的代码中使用泛型集合:
List<Type>
我真正想要的是获得具有已定义基类型的类型安全集合
类似List<typeof(BaseType)>
,但有效:)
答案 0 :(得分:1)
您不能创建一个类型安全的Type
对象集合来描述从基类型派生的类型,因为C#的类型安全通用机制只能在编译时已知的类型上运行,而typeof(MyBaseType)
和typeof(MyDerivedType)
之间的关系只能在运行时知道。
此外,您必须记住,这些Type
对象之间的关系实际上并不是继承关系。 string
可能来自object
,但typeof(string)
并非来自typeof(object)
。因此,虽然他们的关系似乎与类型安全有关,但事实并非如此。
特定类型的Type
个子对象的集合在类型安全方面与仅偶数int
的集合相同 - 它与类型安全无关,因此很难用泛型来实现。
答案 1 :(得分:0)
我不确定你真的明白Type
究竟是什么。
Type
是一个描述运行时类型(它的字段,属性,方法,事件等)的类,但除此之外,typeof(TDerived)
和{{之间的类型没有真正的区别1}}。
如果您只想要一个可以存储对typeof(TBase)
和TBase
实例的引用的列表,您只需声明:
TDerived
如果您只想要一个存储对List<TBase> myList;
个实例的引用的列表 - 您只需声明已经完成的Type
- 在此列表中您可以放置任何List<Type>
引用 - 例如Type
,typeof(int)
等。