基于可空类型的对象只在该对象为非空时才会装箱。如果 HasValuefalse,则不装箱,而是将对象引用直接赋值为 null。例如:

 CopyCode image复制代码
bool? b = null;
object o = b;
// Now o is null.

如果对象非空,也就是说,如果 HasValuetrue,则会发生装箱过程,但只将可空对象所基于的基础类型装箱。如果将非空的可空值类型装箱,将使值类型本身(而不是包装该值类型的 System.Nullable)装箱。例如:

 CopyCode image复制代码
bool? b = false;
int? i = 44;
object bBoxed = b; // bBoxed contains a boxed bool.
object iBoxed = i; // iBoxed contains a boxed int.

对于那些通过装箱非可空类型而创建的类型来说,两种装箱对象是完全相同的。并且,像非可空装箱类型一样,可以将它们取消装箱,使其成为可空类型,如下所示:

 CopyCode image复制代码
bool? b2 = (bool?)bBoxed;
int? i2 = (int?)iBoxed;

Expand 图像备注

Expand image请参见