.NETStandard 1.0/.NET Core中Type.GetGenericArguments()的等价物是什么?

Ste*_*ven 14 .net c# .net-core .net-standard

这个方法System.Type.GetGenericArguments()是从.NETStandard 1.0中"丢失"的,我认为它TypeInfo.GenericTypeArguments是替代品GetGenericArguments(),但不幸的是,它们在提供开放泛型类型时表现不同.以下面的代码为例:

Type type = typeof(ICommandHandler<>);
type.GetGenericArguments(); // return { TCommand }
type.GetTypeInfo().GenericTypeArguments; // returns empty array
Run Code Online (Sandbox Code Playgroud)

当该GetGenericArguments()方法返回泛型类型参数时TCommand,GenericTypeArguments只返回一个相同的open-generic类型的空数组.

.NET Standard 1.0 的确切行为GenericTypeArguments和等价物是Type.GetGenericArguments()什么?

Ste*_*ven 12

在进一步调查之后,Type.GenericTypeArguments如果类型不是泛型类型定义,似乎只返回任何内容.在TypeInfo.GenericTypeParameters另一方面,只有当类型是泛型类型定义返回任何.

以下代码模仿以下行为Type.GetGenericArguments():

type.GetTypeInfo().IsGenericTypeDefinition 
    ? type.GetTypeInfo().GenericTypeParameters 
    : type.GetTypeInfo().GenericTypeArguments;
Run Code Online (Sandbox Code Playgroud)