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

本文关键字:泛型 参数 于泛型 方法 返回类型 是否 检查 | 更新日期: 2023-09-27 17:59:56

当我有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的打开版本,或者有更简单(更快)的方法吗?

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

我被纠正了。。。

给定:

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);

在这里,它被认为是一个问题。。。我使用它作为一个功能:-)