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

时间:2010-06-30 16:07:21

标签: c# nullable

This MSDN reference似乎表示当int?(或任何Nullable<T>)有一个值时,它总是被装箱(因此存储方式比存储方式效率低得多) int)。是这样的吗?

3 个答案:

答案 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>是通用的,因此它包含真实的intbool

MSDN页面讨论的是当您点击Nullable<int>Nullable<bool>时会发生什么。如果您从未将可空结构分配给object变量,则不会产生拳击开销。

答案 2 :(得分:2)

没有。 Nullable对象是一个通用结构,并在内部处理T的值而不进行装箱。