c# – 表达式树中的绑定参数

c# – 表达式树中的绑定参数,第1张

概述我想知道如何将参数绑定表达式树中的值 就像是 Expression<Func<String, String, bool>> e1 = (x,y) => x == y; 然后我想绑定y,同时将其保存为单个表达式. 一个明显的尝试就是这样 Expresion<Func<String, bool>> e2 = x => e1(x, "Fixed Value Here"); 但是这会使我的表达式变成一个 我想知道如何将参数绑定到表达式树中的值

就像是

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

然后我想绑定y,同时将其保存为单个表达式.
一个明显的尝试就是这样

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

但是这会使我的表达式变成一个Invoke节点.有没有办法在获取第二个表达式的签名的过程中简单地绑定我的第一个表达式中的参数?

解决方法
Expression<Func<String,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# – 表达式树中的绑定参数全部内容,希望文章能够帮你解决c# – 表达式树中的绑定参数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1239595.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存