2

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 :)

4

2 回答 2

1

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

此外,您必须记住,这些Type对象之间的关系实际上并不是继承关系。string可能源自object,但typeof(string)不源自typeof(object)。因此,虽然他们的关系似乎与类型安全有关,但实际上并非如此。

Type就类型安全而言,特定类型的子类型对象的集合仅等效于偶数编号int的集合——它与类型安全无关,因此很难用泛型实现。

于 2013-07-24T07:57:52.120 回答
0

我不确定您是否真的了解 a 的Type真正含义。

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

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

List<TBase> myList;

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

于 2013-07-24T07:39:41.007 回答