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

What is the equivalent of Type.GetGenericArguments() in .NETStandard 1.0 / .NET Core?

方法 System.Type.GetGenericArguments() 是来自 .NETStandard 1.0 的 'missing',我认为 TypeInfo.GenericTypeArgumentsGetGenericArguments() 的替代品,但不幸的是,它们在提供时表现不同使用开放的通用类型。以下面的代码为例:

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

虽然 GetGenericArguments() 方法 returns 泛型类型参数 TCommand,但 GenericTypeArguments 只是 returns 相同开放泛型类型的空数组.

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

毕竟这可能是评论(而不是答案)。

在 .NET 4.6.1 上,System.Type 上有两个成员,即:

/* 1 */ type.GetGenericArguments()               // returns { TCommand, }

/* 2 */ type.GenericTypeArguments                // returns empty array

System.Reflection.TypeInfo上加一个成员,即:

/* 3 */ type.GetTypeInfo().GenericTypeParameters // returns { TCommand, }

总共 名成员。

但是,首先提到的两个成员也是 System.Reflection.TypeInfo 继承System.Type 的子类。

在 .NET 4.6.1 上,当您执行 type.GetTypeInfo().GenericTypeArguments(如您的问题)时,您实际上在 Type 上调用了 属性,即我的成员标记为 /* 2 */.

经过进一步调查,如果类型不是泛型类型定义,Type.GenericTypeArguments 似乎只会 return 任何东西。另一方面,TypeInfo.GenericTypeParameters 如果类型是泛型类型定义,则只有 return 是任何类型。

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

type.GetTypeInfo().IsGenericTypeDefinition 
    ? type.GetTypeInfo().GenericTypeParameters 
    : type.GetTypeInfo().GenericTypeArguments;