This MSDN reference似乎表示当int?
(或任何Nullable<T>
)有一个值时,它总是被装箱(因此存储方式比存储方式效率低得多) int
)。是这样的吗?
答案 0 :(得分:11)
该页面指的是装箱Nullable<T>
结构时,而不是结构本身内的值。
在尝试装入可以为空的本身之前,存储可空类型不涉及装箱:
int? a = 42; // no boxing
int? n = null; // no boxing
object nObj = n; // no boxing
object aObj = a; // only now will boxing occur
此行为与装箱常规值类型(处理空案例除外)没有什么不同,因此确实可以预期。
答案 1 :(得分:2)
事实并非如此。 Nullable<T>
是通用的,因此它包含真实的int
或bool
。
MSDN页面讨论的是当您点击Nullable<int>
或Nullable<bool>
时会发生什么。如果您从未将可空结构分配给object
变量,则不会产生拳击开销。
答案 2 :(得分:2)
没有。 Nullable对象是一个通用结构,并在内部处理T的值而不进行装箱。