Выбор ответа Middle Типы значений и ссылочные обновлено

Арифметика с int?

Вопрос

Чему равно c и что выведет сравнение?

int? a = 5;
int? b = null;
int? c = a + b;
Console.WriteLine(c > 0);

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: c равно null, сравнение выведет False. Операторы над Nullable<T «поднятые» (lifted): если хотя бы один операнд null, результат null, исключения нет.

Варианты ответа

  1. c равно 5, null трактуется как 0
  2. Будет InvalidOperationException при сложении
  3. c равно null, сравнение выведет True
  4. c равно null, сравнение выведет Falseправильный ответ

Разбор

Операторы над Nullable<T> «поднятые» (lifted): если хотя бы один операнд null, результат null, исключения нет. Сравнения <, >, <=, >= с null всегда дают false, поэтому и c > 0, и c <= 0 ложны. InvalidOperationException бросает только .Value у пустого значения. Ноль вместо null подставляет лишь явный ?? 0 или GetValueOrDefault().

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме