【发布时间】:2016-07-04 04:33:08
【问题描述】:
如果我有方法名和方法的参数,如何为方法创建MethodCallExpression?
这是一个示例方法:
public void HandleEventWithArg(int arg)
{
}
这是我的代码:
var methodInfo = obj.GetType().GetMethod("HandleEventWithArg");
var body = Expression.Call(Expression.Constant(methodInfo), methodInfo.GetType().GetMethod("Invoke"), argExpression);
这是一个例外:
未处理的类型异常 在 mscorlib.dll 中发生“System.Reflection.AmbiguousMatchException”
附加信息:找到不明确的匹配项。
【问题讨论】:
-
使用方法名时,必须与命名空间结合。
-
@moller1111 我很确定这不是真的。
-
它给出了一个例外,因为可以为您的方法名称找到多个匹配项。基本上,可以肯定的是,同名和框架抛出了许多重载。您可以通过传递正确的参数类型来指定确切的重载来解决歧义。使用
Type.GetMethod(string, Type[])重载。 -
它给出了一个模棱两可的匹配异常,因为他试图在
MethodInfo类上调用Invoke(它有几个重载,可能其中一些是object和param object),而不是HandleEventWithArg在他的实例上,就像 OP 似乎想要做的那样