Эта ссылка MSDN, кажется, указывает на это когда int?
(или любой Nullable
) имеет значение, оно всегда упаковывало (и следовательно намного менее эффективное хранилище данных, мудрых памятью, чем int
). Имеет место это?
Эта страница относится, когда вы упаковываете Nullable
структура, а не значения внутри самой структуры.
Сохранение типа, допускающего значение NULL, не используется до тех пор, пока вы не попытаетесь упаковать сам тип значения, допускающий значение NULL:
int? a = 42; // no boxing
int? n = null; // no boxing
object nObj = n; // no boxing
object aObj = a; // only now will boxing occur
Это поведение не отличается от упаковки обычного типа значения (за исключением обработки случая NULL), так что это действительно быть ожидаемым.
Это не так. Nullable
является родовым, поэтому он хранит вещественные int
или bool
.
На странице MSDN говорится о том, что происходит, когда вы помещаете в бокс Nullable
или Nullable
. Если вы никогда не присваиваете свою nullable struct переменной object
, то у вас не будет накладных расходов на боксирование.
Нет. Объект Nullable является общей структурой и внутренне обрабатывает значение T без боксирования.