Введение в отсутствующие значения в C#
Переменная типа string? хранит либо ссылку
на текст в памяти, либо специальное значение
null. Так отмечают «данных пока нет»:
необязательное имя пользователя, ответ, который
еще не пришел, или строка, которую программа
заполнит позже.
null - это не пустой текст и не ноль.
Это отметка об отсутствии объекта. Сравнить
переменную с null можно операторами
== и !=, результат имеет тип bool.
В современном проекте C# включен
nullable-контекст для ссылочных типов.
Запись string? явно разрешает пустую
ссылку. Тип string без знака вопроса
задуман так, что null там не ожидается,
и компилятор предупреждает о рискованных местах.
Обычные переменные вроде int и bool
всегда содержат конкретное значение. Им
null не присваивают.
Если обратиться к свойству или методу через
ссылку null, программа остановится
с ошибкой. Поэтому перед использованием
строки с возможным null нужно понимать,
есть ли объект на самом деле.