检查方法返回类型是否基于泛型参数

时间:2015-06-25 15:56:01

标签: c# generics reflection methodinfo

当我有一个MethodInfo时,如何检查返回类型是否基于泛型参数?

public class GenericClass<T>
{
  public class InnerClass 
  {
    public static T A()
    {
      return default(T);
    }
  }       
}

当我检查时

typeof(GenericClass<>.InnerClass).GetMethod("A").ReturnType.IsGenericParameter

我得到true但是如果我只有GenericClass<int>的(封闭的)MethodInfo怎么办?我是否必须走上嵌套类型的路径并检查是否有IsGeneric == true然后获取此类型的GenericTypeDefinition然后通过实例化打开类型来向下走路径,直到我可以创建MethodInfo的开放版本或者在那里一种更容易(也更快)的方式?

1 个答案:

答案 0 :(得分:1)

我的立场得到纠正......

假设:

public class GenericClass<T1>
{
    public class InnerClass<T2>
    {
        public static Tuple<T1, T2, T3> A<T3>()
        {
            return null;
        }
    }
}

Type type = typeof(GenericClass<int>.InnerClass<long>);
var methodInfo = type.GetMethod("A");

MethodInfo method = (MethodInfo)type.Module.ResolveMethod(methodInfo.MetadataToken);

Here它被认为是一个问题...我将它用作功能: - )