Выбор ответа 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, исключения нет.
Варианты ответа
cравно5, null трактуется как 0- Будет
InvalidOperationExceptionпри сложении cравноnull, сравнение выведетTruecравноnull, сравнение выведетFalseправильный ответ
Разбор
Операторы над Nullable<T> «поднятые» (lifted): если хотя бы один операнд null, результат null, исключения нет. Сравнения <, >, <=, >= с null всегда дают false, поэтому и c > 0, и c <= 0 ложны. InvalidOperationException бросает только .Value у пустого значения. Ноль вместо null подставляет лишь явный ?? 0 или GetValueOrDefault().
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Типы значений и ссылочные»
- Что такое boxing и unboxing
- Сравнение двух упакованных чисел через ==
- Когда происходит упаковка
- Переприсваивание параметра-класса
- default и конструктор структуры без параметров
- Число различных точек
- Сумма int с переполнением, как в unchecked
- Среднее с пропусками (int?)