gpt4 book ai didi

c# - 如何在 ExpressionTree 中返回值

转载 作者:太空狗 更新时间:2023-10-29 23:04:58 26 4
gpt4 key购买 nike

我正在尝试为表达式树做,并尝试让它返回一个简单的 int 值。但它不再工作了

        var method = typeof(Console).GetMethod("WriteLine", new Type[] {typeof(string)});

var result = Expression.Variable(typeof(int));



var block = Expression.Block(
result,
Expression.Assign(result,Expression.Constant(0)),
Expression.IfThenElse(Expression.Constant(true),
Expression.Block(Expression.Call(null, method, Expression.Constant("True")),
Expression.Assign(result, Expression.Constant(1))),
Expression.Block(Expression.Call(null, method, Expression.Constant("False")), Expression.Assign(
result, Expression.Constant(0)
))),
result
);


Expression.Lambda<Func<int>>(block).Compile()();

最佳答案

问题不在于从 block 中返回值(你做对了),而是由于使用错误导致变量超出范围 Expression.Block方法重载。

像你的 result 这样的变量表达式必须使用带有 IEnumerable<ParameterExpression> variables 的一些重载传递给 block 表达式参数,例如

    var block = Expression.Block(
new ParameterExpression[] { result },
//... (the rest of the sample code unchanged)
);

关于c# - 如何在 ExpressionTree 中返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54089652/

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