Для чего нужны nullable value types и что может произойти при неправильной работе со свойствами HasValue и Value?

C# / .NET Основы языка Junior

Что это: Nullable value type позволяет хранить значение типа T или состояние отсутствия значения через Nullable<T> и сокращённую запись T?. Это удобно для работы с базами данных, формами и необязательными параметрами. Такой тип отличается от обычного value type возможностью содержать null.

Почему важно: Это базовая тема, без которой сложно корректно работать с данными, где значение может отсутствовать.

Под капотом: Конструкция int? компилируется в структуру System.Nullable<int>. Она содержит поля HasValue и Value. При обращении к Value без проверки HasValue CLR выбрасывает InvalidOperationException.

Типичная ошибка: Разработчики сразу читают свойство Value, не проверяя HasValue, и получают исключение во время выполнения.

int? age = null;

if (age.HasValue)
{
 Console.WriteLine(age.Value);
}