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

Dan*_*ett 12 c# nullable

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

Jus*_*ner 13

该页面指的是装箱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
Run Code Online (Sandbox Code Playgroud)

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