Мне было интересно, почему Nullable<T>
- это тип значения, если он предназначен для имитации поведения ссылочных типов? Я понимаю такие вещи, как давление в ГК, но я не чувствую себя уверенным - если мы хотим, чтобы int
действовал как ссылка, мы, вероятно, все в порядке со всеми последствиями наличия реального ссылочного типа. Я не вижу причин, почему Nullable<T>
- это не просто версия в коробке T
struct.
Как тип значения:
- он по-прежнему должен быть в коробке и распакованном, и многое другое, бокс должен быть немного иным, чем с "нормальными" структурами (для обработки нулевых значений с нулевым значением, например real
null
) -
его нужно обрабатывать по-разному при проверке нулевого(сделано просто вEquals
, никакой реальной проблемы) -
он изменяет, нарушая правило, что структуры должны быть неизменными(нормально, он логически неизменен) - ему нужно специальное ограничение, чтобы запретить рекурсию, например
Nullable<Nullable<T>>
Не делает ли Nullable<T>
ссылочным типом решение проблем?
перефразировать и обновить:
Я немного изменил свой список причин, но мой общий вопрос все еще открыт:
Как ссылочный тип Nullable<T>
будет хуже, чем реализация текущего типа значения? Это только давление в ГК и "небольшое, неизменное" правило? Мне все еще кажется странным...