Из документации MSDN, следующие два фрагмента равны:условного оператора: с Nullable типа Литейно
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
.
Возможный дубликат: http://stackoverflow.com/questions/295833/nullable-type-issue-with-conditional-operator –
@NickGotch Я видел ваше сообщение, но я честно не удовлетворен ответом. Я хочу понять, почему актеры необходимы при использовании одного типа синтаксиса и другого. – Michael
Я думаю, что в этом случае вы можете просто «x = value», или я ошибаюсь? –