c # присваивает значение для логического значения Nullable - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь поиграться с оператором ?: при присвоении значения в логическую переменную, допускающую значение NULL.

Это оригинальный код, который отлично работает

bool? result;
var condition = 3;

if (condition == 1)
    result = true;
else if (condition == 2)
     result = false;
else result = null;

После того, как я изменил код, он обнаружил ошибку, и я исправляю ее после поиска в Интернете

// before (error occur)
result = condition == 1 ? true : (condition == 2 ? false : null);

// after (fixed error)
result = condition == 1 ? true : (condition == 2 ? false : (bool?)null); 
// *or
result = condition == 1 ? true : (condition == 2 ? (bool?)false : null);

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

из моего понимания bool and bool? или bool? and null следует по-прежнему считать не того же типа, но оно работает вСитуация.

Любой совет по этому вопросу будет оценен.Спасибо.

1 Ответ

0 голосов
/ 04 июня 2018

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

В сегменте (condition == 2 ? false : null) два возможных значения: false и null,Компилятор видит false как bool, поэтому он выдаст ошибку, поскольку null не является допустимым альтернативным значением для bool.

Префиксом либо (bool?) вы даете понять, что фактически присваиваете логическое значение, допускающее значение NULL, что делает компилятор счастливым, поскольку он знает, что оба значения действительно одного типа.

...