检索泛型方法的正确重载的 MethodInfo

2023-11-22

我的这种类型包含一个泛型方法的两个重载。我喜欢检索其中一个重载(使用Func<T>参数)使用反射。然而问题是我找不到正确的参数类型来提供Type.GetMethod(string, Type[])方法与.

这是我的类定义:

public class Foo
{
    public void Bar<T>(Func<T> f) { }
    public void Bar<T>(Action<T> a) { }
}

这就是我想出的,不幸的是没有成功:

[TestMethod]
public void Test1()
{
    Type parameterType = typeof(Func<>);

    var method = typeof(Foo).GetMethod("Bar", new Type[] { parameterType });

    Assert.IsNotNull(method); // Fails
}

我怎样才能得到MethodInfo我知道其参数的通用方法?


为什么不使用表达式树?这使得事情变得更容易:

public static MethodInfo GetMethod<T>(
    Expression<Action<T>> methodSelector)
{
    var body = (MethodCallExpression)methodSelector.Body;
    return body.Method;      
}

[TestMethod]
public void Test1()
{
    var expectedMethod = typeof(Foo)
        .GetMethod("Bar", new Type[] { typeof(Func<>) });

    var actualMethod = 
        GetMethod<Foo>(foo => foo.Bar<object>((Func<object>)null)
        .GetGenericMethodDefinition();

    Assert.AreEqual(expectedMethod, actualMethod);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检索泛型方法的正确重载的 MethodInfo 的相关文章

随机推荐