gpt4 book ai didi

c# - 如何为方法创建 MethodCallExpression?

转载 作者:行者123 更新时间:2023-11-30 17:37:24 25 4
gpt4 key购买 nike

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

这是一个示例方法:

public void HandleEventWithArg(int arg) 
{

}

这是我的代码:

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

异常(exception)情况:

An unhandled exception of type 'System.Reflection.AmbiguousMatchException' occurred in mscorlib.dll

Additional information: Ambiguous match found.

最佳答案

我不确定这对你是否合适,但你对调用表达式的构造在我看来是错误的(你正在尝试创建一个调用方法信息的 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 made a fiddle

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

关于c# - 如何为方法创建 MethodCallExpression?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38177007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com