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

北战南征 提交于 2019-12-03 11:41:01

After further investigation, the Type.GenericTypeArguments seems to only return anything if the type isn't a generic type definition. The TypeInfo.GenericTypeParameters on the other hand, only returns any if the type is a generic type definition.

The following code mimics the behavior of Type.GetGenericArguments():

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

This may turn out to be a comment (not an answer) after all.

On .NET 4.6.1, there are two members on System.Type, namely:

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

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

plus one member on System.Reflection.TypeInfo, namely:

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

for a total of three members.

However, the two first-mentioned members are also inherited by System.Reflection.TypeInfo, a subclass of System.Type.

On .NET 4.6.1, when you do type.GetTypeInfo().GenericTypeArguments (as in your question), you really call the property on Type, i.e. my member marked /* 2 */.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!