这个MSDN参考 似乎表明当时 int?
(或任何 Nullable<T>
)有一个值,它总是盒装(因此数据存储效率低得多) int
)。是这样的吗?
这个MSDN参考 似乎表明当时 int?
(或任何 Nullable<T>
)有一个值,它总是盒装(因此数据存储效率低得多) int
)。是这样的吗?
那个页面指的是你装拳的时候 Nullable<T>
struct,而不是struct本身内部的值。
在您尝试装入可空的本身之前,存储可空类型不涉及装箱:
int? a = 42; // no boxing
int? n = null; // no boxing
object nObj = n; // no boxing
object aObj = a; // only now will boxing occur
这种行为与装箱常规值类型(处理空案例除外)没有什么不同,所以它确实是预料之中的。
事实并非如此。 Nullable<T>
是通用的,所以它是真实的 int
要么 bool
。
MSDN页面正在讨论当您打包时会发生什么 Nullable<int>
要么 Nullable<bool>
。如果你永远不会将你的可空结构分配给 object
变量,你不会招致拳击开销。
不可以.Nullable对象是一个通用的结构,并在内部处理T的值而不需要装箱。