Я только что увидел этот вопрос в списке «связанных вопросов» на Почему Nullable является структурой? , и я думаю, что мой ответ там применим и здесь. Весь смысл Nullable<T>
заключается в том, чтобы действовать как тип значения во всех отношениях, за исключением способности принимать нулевое значение.
Нулевое значение нулевой ссылки можно посмотреть двумя способами. Один из них заключается в том, что он не ссылается ни на что, другой - на то, что он не имеет значащего значения. Эти вещи в значительной степени представляют собой два разных способа сказать одно и то же, но они по-разному используются.
Nullable<T>
дает нам возможность сказать «это не имеет значащего значения», и в этом смысле он может иметь ту же семантику, что и нулевая ссылка, но это не похоже на ссылку любым другим способом. Когда ноль, то это ничтожность - это просто «нет значащего значения», ноль - не «не относится ни к чему», а когда не ноль, оно содержит значение, не ссылаясь на него.
(Aaronaught утверждает, что это означает, что Nullable действительно не может содержать нуль, хотя я не согласен, потому что на том уровне, на котором он используется, он может иметь семантическое нуль, его точка зрения стоит учитывать в этом, даже если «ноль» Nullable отличается от ссылки - на самом деле наше несогласие - это вопрос уровня абстракции, который мы выбираем).