可以为 null 的类型是 System.Nullable<T> 结构的实例。 可以为 null 的类型可表示一个基础类型的所有值 T,还可以再表示一个 null 值。 基础类型 T 可以是任何不可为 null 的值类型T 不能是引用类型。

例如,可以将 null 或任何整数值(从 Int32.MinValueInt32.MaxValue)赋给 Nullable<int>,并可将 truefalsenull 赋给Nullable<bool>

需要表示基础类型的未定义的值时,请使用可以为 null 的类型。 布尔变量只能有两个值:true 和 false。 没有“未定义”的值。 在许多编程应用程序中,尤其是数据库交互中,变量值可能未定义或缺失。 例如,数据库中的字段可能包含值 true 或 false,但它也可能根本不包含任何值。 这种情况下要使用 Nullable<bool> 类型。

可以为 null 的类型具有以下特征:

  • 可以为 null 的类型表示可以向其赋与 null 值的值类型变量。 不能根据引用类型创建可以为 null 的类型 (引用类型已支持 null 值)。

  • 语法 T?Nullable<T> 的简写。 这两种形式是可互换的。

  • 向可以为 null 的类型赋值的方法与向基础值类型赋值的方法相同:int? x = 10;double? d = 4.108;。 还可赋予 null 值:int? x = null;

  • 使用 Nullable<T>.HasValueNullable<T>.Value 只读属性可测试是否存在 null 值并检索值,如以下示例所示:if (x.HasValue) y = x.Value;

  • 还可将 ==!= 运算符用于可以为 null 的类型,如以下示例所示:if (x != null) y = x.Value; 如果 ab 均为 null,则 a == b 的计算结果为 true

  • 从 C# 7.0 开始,可以使用模式匹配来检查和获取可以为 null 的类型的值:if (x is int valueOfX) y = valueOfX;

  • T? 的默认值是一个实例,其 HasValue 属性返回 false

  • 使用 GetValueOrDefault() 方法可返回赋予的值,如果可以为 null 的类型的值为 null,它还可返回基础值类型的默认值。

  • 使用 GetValueOrDefault(T) 方法可返回赋予的值,如果可以为 null 的类型的值为 null,它还可返回提供的默认值。

  • 使用 null 合并运算符 ??,基于可以为 null 的类型的值向基础类型赋值:int? x = null; int y = x ?? -1;。 在示例中,由于 x 为 null,所以 y 的结果值为 -1

  • 如果定义了(用户定义的)两种数据类型之间的转换,还可将同一转换用于这些数据类型的可为 null 的版本。

  • 不得嵌套可以为 null 的类型。 不会编译下面的一行代码:Nullable<Nullable<int>> n;

有关详细信息,请参阅使用可以为 null 的类型,以及如何:标识可以为 null 的类型主题。

请参阅

最新文章

  1. linux php编译安装
  2. android知识杂记(一)
  3. echo 命令
  4. javascript js中的typeof使用
  5. Bootstrap学习笔记上(带源码)
  6. Cloud Test 在手,宕机时让您不再措手不及
  7. SQL某个字段在原内容上增加固定内容或replace查找替换内容
  8. SerfJ REST
  9. Jquery对select下拉框的操作
  10. JS面向对象一
  11. IntelliJ IDEA如何设置头注释,自定义author和date
  12. Angular(03)-- lint风格规范和WebStorm小技巧
  13. 生成透视列之COALESCE
  14. Vivado中VIO核使用
  15. Redis .NET操作
  16. apache ab 结果Failed requests探究
  17. win10打文件预览功能
  18. 2018.09.25 codeforces1053E. Euler tour(并查集+st表+模拟)
  19. datediff
  20. Python练习-猜年龄的LowB游戏

热门文章

  1. SharePoint Add-in Model 介绍 - 引文(先导篇)
  2. delphi的Socket(有两种分别继承TObject和TComponent的方式)
  3. linux如何直接运行python文件
  4. cloudsim 3.0.3下载与安装教程
  5. SYN4201型 同步分频钟
  6. python文件及路径管理函数
  7. Android 即时通讯开发小结(一)
  8. Storm —— 集群环境搭建
  9. 了解selenium--(虫师的博客)
  10. wireshark数据包分析实战 第一章