如何获得'basic'来自包含泛型参数的type

本文关键字:泛型 参数 type 包含 何获得 basic | 更新日期: 2023-09-27 18:05:56

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

ie。如何从typeof(Aaa<Bbb>)得到Aaa

Bbb部分通过GenericTypeArguments阵列可用。有一个BaseType属性,但是它返回typeof(object)

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

如何获得'basic'来自包含泛型参数的type

我想你可能在找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#术语