这里有一个类似的问题:
假设您知道方法的参数和返回类型。我想做点不一样的。我正在寻找创建 System.Reflection 的 .GetMethod(string) 的一个版本,它采用 lambda 函数 - 所以而不是:
MethodInfo methodInfo = typeof(MyClass).GetMethod("AddThing");
我可以使用更安全的编译:
MethodInfo methodInfo = ReflectionHelper.GetMethod<MyClass>(mc => mc.AddThing);
因此,如果 ReflectionHelper 事先知道参数计数和返回类型,那么答案将很简单——例如,如果它没有参数并返回字符串:
public static MethodInfo GetMethod<T, TReturn>(Expression<Func<T, Func<TArg, TReturn>>> expr)
{
return ((MethodCallExpression)expr.Body).Method;
}
除了我事先不知道参数计数/返回类型,我想避免只是用 20 个覆盖大多数但不是所有情况的重载来发送垃圾邮件。
那么,我该怎么做呢?