gpt4 book ai didi

c# - 从范围引用但未定义的 LambdaExpression 变量

转载 作者:太空狗 更新时间:2023-10-30 01:25:06 26 4
gpt4 key购买 nike

我有一个简单的 lambda 表达式,我想编译和调用它

Expression< Func< Commands, bool>> expression = c => c.IsValid("test");

但是当我执行以下操作时:

LambdaExpression le = Expression.Lambda(expression.Body);

object result = le.Compile().DynamicInvoke();

编译抛出错误:

variable 'c' of type 'ConsoleApplication1.Commands' referenced from scope '', but it is not defined

如何为这个表达式设置实例变量?

最佳答案

为什么不直接编译表达式本身呢?如果您想多次使用某些特定的“ConsoleApplication1.Commands”实例调用它,您可以关闭该实例:


var validator = expression.Compile();

var c = new Commands();
var validatorForC = () => validator(c);

否则你需要构建调用表达式,如下所示:


var c = new Commands();
var le = Expression.Lambda(Expression.Invoke(expression, Expression.Constant(c)));
object result = le.Compile().DynamicInvoke();

或者您可以制作 ExpressionVisitor,它将用 Expression.Constant 替换“expression.Body”中所有出现的“c”参数。

关于c# - 从范围引用但未定义的 LambdaExpression 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7732770/

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