C#ExpressionVisitor.VisitBinary

时间:2013-01-05 10:13:33

标签: c# expressionvisitor

发件人:如何:修改表达式树(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?

提前感谢您的时间。

0 个答案:

没有答案