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

时间:2013-07-24 07:31:56

标签: c#

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

List<Type>

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

2 个答案:

答案 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>引用 - 例如Typetypeof(int)等。