Тип ссылки сохраняется как ссылка (например, указатель) на экземпляр объекта.
null
означает ссылку, которая не указывает на экземпляр объекта.
Типы значенийхранятся как сами значения, без каких-либо ссылок.
Следовательно, не имеет смысла иметь тип значения null
- тип значения по определению содержит значение.
Nullable<T>
- это тип значения с флагом HasValue
, который может быть false
, чтобы указать, что значение отсутствует.У него все еще есть значение (когда HasValue
равно false
, Value
равно default(T)
), но флаг HasValue
говорит вам игнорировать значение.
Это не имеет ничего общего с null
,за исключением того, что CLR автоматически распаковывает null
упакованные значения в Nullable<T>
с HasValue
, установленным в false
.