问题 是C#int?当hasvalue = true时,bool总是装箱?


这个MSDN参考 似乎表明当时 int? (或任何 Nullable<T>)有一个值,它总是盒装(因此数据存储效率低得多) int)。是这样的吗?


4036
2018-06-30 16:07


起源



答案:


那个页面指的是你装拳的时候 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

这种行为与装箱常规值类型(处理空案例除外)没有什么不同,所以它确实是预料之中的。


11
2018-06-30 16:10





事实并非如此。 Nullable<T> 是通用的,所以它是真实的 int 要么 bool

MSDN页面正在讨论当您打包时会发生什么 Nullable<int> 要么 Nullable<bool>。如果你永远不会将你的可空结构分配给 object 变量,你不会招致拳击开销。


2
2018-06-30 16:11





不可以.Nullable对象是一个通用的结构,并在内部处理T的值而不需要装箱。


2
2018-06-30 16:12