
就像是
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# – 表达式树中的绑定参数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)