我如何为一个方法做一个methodcalexpression

本文关键字:一个 methodcalexpression 方法 | 更新日期: 2023-09-27 17:54:18

如果我有一个方法名和方法的参数,我如何为该方法创建一个MethodCallExpression ?

下面是一个示例方法:

public void HandleEventWithArg(int arg) 
{ 
}

下面是我的代码:

var methodInfo = obj.GetType().GetMethod("HandleEventWithArg");
var body = Expression.Call(Expression.Constant(methodInfo), methodInfo.GetType().GetMethod("Invoke"), argExpression);

这里有一个例外:

类型的未处理异常"System.Reflection。mscorlib.dll中发生了AmbiguousMatchException

附加信息:找到歧义匹配。

我如何为一个方法做一个methodcalexpression

我不确定这对你是否合适,但是你的调用表达式的构造对我来说是错误的(你试图创建一个调用你的方法info的Invoke方法的表达式,而不是你的类型的实际方法。

要创建一个在实例上调用方法的表达式,可以这样做:
var methodInfo = obj.GetType().GetMethod("HandleEventWithArg");
// Pass the instance of the object you want to call the method
// on as the first argument (as an expression).
// Then the methodinfo of the method you want to call.
// And then the arguments.
var body = Expression.Call(Expression.Constant(obj), methodInfo, argExpression);

I've make a fiddle

PS:我猜argExpression是您的方法期望的int的表达式

相关文章: