发件人:如何:修改表达式树(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?
提前感谢您的时间。