反射 - 将非泛型方法从泛型类型定义导航到具体类型定义

时间:2013-09-12 16:55:11

标签: c# generics reflection

假设我有一个课程如下:

    class A<T>
    {
        public void Method()
        {
        }
    }

所以这个类是通用的,但它的方法不是。

我可以找到方法,比如说:

var m = typeof(A<int>).GetGenericTypeDefinition().GetMethod("Method");

现在我想从这个'm'(实际上是A<T>.Method)导航到具体的类型,例如A<int>.Method

我想以一般方式这样做,即我不想使用方法名称,因为我可能会遇到参数数量过多的情况。

有没有办法做到这一点,还是我必须加载具有相同名称和比较参数的方法?

1 个答案:

答案 0 :(得分:1)

您可以使用MakeGenericType方法,如下所示:

m.DeclaringType.MakeGenericType(typeof(int))

如果你真的想这样做,可能会再次GetMethod

m.DeclaringType.MakeGenericType(typeof(int)).GetMethod("Method");

但是,请考虑Jon Skeet对更简单解决方案的评论。