1

来自:如何:修改表达式树(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 ?

提前感谢您的时间。

4

0 回答 0