Для чего нужны 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);
}