如何从包含通用参数的Type中获取“基本”类型?

时间:2014-05-30 05:38:39

标签: c# generics reflection

我正在检查一组Type对象。我无法确定如何取出基本的'包含通用参数的类型的部分。

即。如何从Aaa

获取typeof(Aaa<Bbb>)

Bbb部分可通过GenericTypeArguments数组获得。有一个BaseType属性,但它返回typeof(object)

似乎我可以解析FullName属性来确定类型,但必须有更好的方法来做到这一点吗?

1 个答案:

答案 0 :(得分:3)

我想你可能在寻找GetGenericTypeDefinition

  

返回一个Type对象,该对象表示可以构造当前泛型类型的泛型类型定义。

所以:

typeof(Aaa<Bbb>);

正如您所观察到的那样,为Aaa<Bbb>提供了类型对象。鉴于:

typeof(Aaa<Bbb>).GetGenericTypeDefinition();

将为您提供Aaa<T> 1 的类型对象(或Aaa的任何类型参数名称)。您可以从中例如通过MakeGenericType

提供新的类型参数来构造其他泛型类型

当然,如果您只想通过typeof()表达式获取开放泛型类型,则可以使用:

typeof(Aaa<>);

1 在CLR术语中,这是

Aaa`1

而不是Aaa<T>,但我在这个答案中坚持使用C#术语。