来自:如何:修改表达式树(C# 和 Visual Basic)
http://msdn.microsoft.com/en-us/library/bb546136.aspx
protected override Expression VisitBinary(BinaryExpression b)
{
if (b.NodeType == ExpressionType.AndAlso)
{
Expression left = this.Visit(b.Left);
Expression right = this.Visit(b.Right);
// Make this binary expression an OrElse operation instead of an AndAlso operation.
return Expression.MakeBinary(ExpressionType.OrElse, left, right, b.IsLiftedToNull, b.Method);
}
return base.VisitBinary(b);
}
如果我对这种方法的目的及其工作方式有误,请纠正我。谢谢你。
如果我有一个现有的表达式,Expresstion Visitor 会将每个 BinaryExpression 发送到这个方法,所以这两行,据我了解是浪费:
Expression left = this.Visit(b.Left);
Expression right = this.Visit(b.Right);
因为这两行做同样的事情,将负责将每个 BinaryExpression 发送到此方法。我对吗?
Expression.MakeBinary 的目的是将 BinaryExpression 更新为新的。那么为什么不使用这个方法:b.Update??
最后一件事,这个方法是否会将这个表达式上的每个 AndAlso 替换为 OrElse ?
提前感谢您的时间。