具有已定义基类型的Type类的类型安全集合

本文关键字:Type 类型安全 集合 类型 定义 基类 | 更新日期: 2023-09-27 18:24:43

我在代码中使用泛型集合:

List<Type>

我真正想要的是获得具有已定义basetype的类型的类型安全集合
类似于List<typeof(BaseType)>,但有效:)

具有已定义基类型的Type类的类型安全集合

不能创建描述从基类型派生的类型的Type对象的类型安全集合,因为C#的类型安全泛型机制只能对编译时已知的类型进行操作,而typeof(MyBaseType)typeof(MyDerivedType)之间的关系只有在运行时才知道。

此外,您必须记住,这些Type对象之间的关系实际上并不是继承关系。string可以从object导出,但typeof(string)不从typeof(object)导出。因此,尽管他们的关系似乎与类型安全有关,但事实并非如此。

就类型安全性而言,特定类型的子类型的Type对象的集合仅相当于偶数ints的集合——它与类型安全无关,因此很难用泛型实现。

我不确定你是否真的理解Type到底是什么。

Type是一个描述运行时类型(字段、属性、方法、事件等)的类,但除此之外,typeof(TDerived)typeof(TBase)在类型上没有真正的区别。

如果您只想要一个可以存储对TBaseTDerived实例的引用的列表,您可以简单地声明:

List<TBase> myList;

如果您只想要一个存储对Type实例的引用的列表,您只需像已经做的那样声明一个List<Type>,就可以在该列表中放置任何Type引用,例如typeof(int)typeof(TBase)等。