О C # Expression.MakeBinary (), как использовать - PullRequest
2 голосов
/ 24 сентября 2019

О Expression.MakeBinary()

BinaryExpression MakeBinary (
    ExpressionType binaryType, 
    Expression left, 
    Expression right, 
    bool liftToNull,
    MethodInfo method
);

образец:

        return Visit(expression);  
    }  

    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);  
        }  

Объяснение документации Microsoft: b.IsLiftedToNull true, если тип возвращаемого оператором оператора поднимается до обнуляемого типа;в противном случае - ложь.

Я не понимаю, что это значит. Какой эффект имеет истина или ложь?Что делает b.Method? 1012 *

1 Ответ

1 голос
/ 24 сентября 2019

Документация для BinaryExpression сама по себе полезна для ответа на эти вопросы.

Обратите внимание, что для этого метода существует три перегрузки:

MakeBinary(ExpressionType, Expression, Expression)

MakeBinary(ExpressionType, Expression, Expression, Boolean, MethodInfo)

MakeBinary(ExpressionType, Expression, Expression, Boolean, MethodInfo, LambdaExpression)

Тот, на кого вы ссылаетесь, является вторым из трех.

Поднятые операторы

Поднятый оператор позволяет использовать оператор с ненулевым типом также с эквивалентным обнуляемым эквивалентом.

Например:

int a = 1; int b = 2; int c = a + b

Здесьоператор + определен для int, int.

Но:

int? a = 1; int? b = 2; int? c = a + b

Здесь оператор + не определен в языкеспецификация для int?, int?, и поэтому компилятор «поднимает» оператор, позволяя ему работать в этом случае.

Итак, для вопроса a BinaryExpression «Представляет выражение с бинарным оператором»;и если IsLiftedToNull истинно, это будет «Представляет выражение, которое имеет двоичный оператор, допускающий значение NULL».

Метод

Вместо того, чтобы полагаться на предопределенный оператор,Здесь вы можете указать метод, который будет использоваться для двоичной операции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...