C# ExpressionVisitor.VisitBinary

От: Как: изменить деревья выражений (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 будет отправлять каждое BinaryExpression этому методу, так что эти две строки, насколько я понимаю, являются пустой тратой:

Expression left = this.Visit(b.Left);
Expression right = this.Visit(b.Right);

Поскольку эти две строки делают одно и то же, они будут отвечать за каждое BinaryExpression, которое будет отправлено этому методу. Я прав?

Цель Expression.MakeBinary - обновить BinaryExpression до нового. Так почему бы не использовать этот метод: b.Update??

и, наконец, собирается ли этот метод заменить каждое AndAlso в OrElse в этом выражении?

спасибо за ваше время заранее.

0 ответов

Другие вопросы по тегам