gpt4 book ai didi

c# - 获取表达式树中方法参数的值

转载 作者:太空狗 更新时间:2023-10-29 21:19:42 25 4
gpt4 key购买 nike

我在摆弄表情树,但我有点卡住了。

我有这样的表达:

Expression<Func<IX, int>> expr = i => i.GetAll(1, b, method());

地点:

int b = 2;

public static int method()
{
return 3;
}

public interface IX
{
int GetAll(int a, int b, int c);
}

现在我想获取方法的名称和该方法的参数值。方法名很简单,参数值比较难。我知道我可以自己解析它们,但我需要处理所有情况(ConstantExpressionMemberExpressionMethodCallExpression,也许更多我不是意识到)。所以我在想是否有“通用”的方式来获得他们的值(value)。例如 1、2、3。

最佳答案

您可以获取 MethodCallExpression 的参数有问题 并创建编译 Func<object>来自它们的 s(必要时装箱值类型),然后可以对其进行评估。

例如:

var args = from arg in ((MethodCallExpression)expr.Body).Arguments
let argAsObj = Expression.Convert(arg, typeof(object))
select Expression.Lambda<Func<object>>(argAsObj, null)
.Compile()();

如果表达式的主体不是方法调用表达式,或者如果方法的任何参数不能按原样求值(例如,如果它们依赖于表达式的参数),这显然会崩溃。

显然,如果您事先知道方法的参数类型,您可以做得更好。对于您的具体示例,这应该有效:

var args = from arg in ((MethodCallExpression)expr.Body).Arguments               
select Expression.Lambda<Func<int>>(arg, null)
.Compile()();

关于c# - 获取表达式树中方法参数的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5181269/

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