gpt4 book ai didi

c# - 表达式树中的绑定(bind)参数

转载 作者:可可西里 更新时间:2023-11-01 09:00:29 27 4
gpt4 key购买 nike

我想知道如何将参数绑定(bind)到表达式树中的值

有点像

Expression<Func<String, String, bool>> e1 = (x,y) => x == y;

然后我想绑定(bind) y,同时将其保留为单个表达式。一个明显的尝试是类似

Expresion<Func<String, bool>> e2 = x => e1(x, "Fixed Value Here");

但这会将我的表达式变成一个 Invoke 节点。有没有一种方法可以在我的第一个表达式中简单地绑定(bind)一个参数,同时获取第二个表达式的签名?

最佳答案

Expression<Func<String, String, bool>> e1 = (x,y) => x == y;

var swap = new ExpressionSubstitute(e1.Parameters[1],
Expression.Constant("Fixed Value Here"));
var lambda = Expression.Lambda<Func<string, bool>>(
swap.Visit(e1.Body), e1.Parameters[0]);

class ExpressionSubstitute : ExpressionVisitor
{
public readonly Expression from, to;
public ExpressionSubstitute(Expression from, Expression to)
{
this.from = from;
this.to = to;
}
public override Expression Visit(Expression node)
{
if (node == from) return to;
return base.Visit(node);
}
}

这使用 ExpressionVisitor 重建表达式,用常量替换 y

另一种方法是使用 Expression.Invoke,但这并不适用于所有情况。

关于c# - 表达式树中的绑定(bind)参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8610506/

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