Из документации MSDN следующие два фрагмента равны:
bool value;
int x = (value) ? 0 : 1;
и
bool value;
int x;
if (value)
x = 0;
else
x = 1;
Отличный, замечательный. Я использую это все время. Тесный и эффективный.
Если мы попробуем это с нулевым типом, например:
int? x = (value.HasValue) ? value.Value : null;
Мы получаем ошибку времени компиляции:
The type of conditional expression cannot be determined
because there is no implicit conversion between '{NullableType}' and null.
Это компилируется отлично:
int? value;
int? x;
if (value.HasValue)
x = value.Value;
else
x = null;
Итак, я понимаю, что для компиляции первого оператора компилятор требует явного перевода на (int?)null
. Я не понимаю, почему это требуется в этом выражении, но не в блоке If Else
.