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