装箱可空类型(C# 编程指南) - C# 编程指南

返回介绍

装箱可空类型(C# 编程指南)

发布于 2019-11-12 字数1972 浏览 699 评论 0

基于可以为 null 的类型的对象只在该对象为非空时装箱。如果 HasValue 为 false,则将对象引用赋值为 null,而不进行装箱。例如:

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

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

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

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

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

备注

可以为 null 的类型在装箱时的行为具有两个优点:

  1. 可以测试可以为 null 的对象及其装箱的对应项是否为空:

      复制代码
      bool? b = null;
      object boxedB = b;
      if (b == null)
      {
        // True.
      }
      if (boxedB == null)
      {
        // Also true.
      }
  2. 装箱的可以为 null 的类型完全支持基础类型的功能:

      复制代码
      double? d = 44.4;
      object iBoxed = d;
      // Access IConvertible interface implemented by double.
      IConvertible ic = (IConvertible)iBoxed;
      int i = ic.ToInt32(null);
      string str = ic.ToString();

有关可以为 null 的类型和装箱行为的更多示例,请参见可空示例。

请参见

任务

如何:标识可空类型(C# 编程指南)

概念

C# 编程指南

参考

可空类型(C# 编程指南)

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

目前还没有任何评论,快来抢沙发吧!