能够为 null 的类型是 System.Nullable<T> 结构的实例。 能够为 null 的类型可表示一个基础类型的全部值 T
,还能够再表示一个 null 值。 基础类型 T
能够是任何不可为 null 的值类型。 T
不能是引用类型。html
例如,能够将 null
或任何整数值(从 Int32.MinValue 到 Int32.MaxValue)赋给 Nullable<int>
,并可将 truefalse 或 null
赋给Nullable<bool>
。数据库
须要表示基础类型的未定义的值时,请使用能够为 null 的类型。 布尔变量只能有两个值:true 和 false。 没有“未定义”的值。 在许多编程应用程序中,尤为是数据库交互中,变量值可能未定义或缺失。 例如,数据库中的字段可能包含值 true 或 false,但它也可能根本不包含任何值。 这种状况下要使用 Nullable<bool>
类型。express
能够为 null 的类型具备如下特征:编程
能够为 null 的类型表示能够向其赋与 null
值的值类型变量。 不能根据引用类型建立能够为 null 的类型 (引用类型已支持 null
值)。api
语法 T?
是 Nullable<T>
的简写。 这两种形式是可互换的。ide
向能够为 null 的类型赋值的方法与向基础值类型赋值的方法相同:int? x = 10;
或 double? d = 4.108;
。 还可赋予 null
值:int? x = null;
。测试
使用 Nullable<T>.HasValue 和 Nullable<T>.Value 只读属性可测试是否存在 null 值并检索值,如如下示例所示:if (x.HasValue) y = x.Value;
ui
若是变量包含值,则 HasValue 属性返回 true
;若是值为 null
,则返回 false
。spa
若是 HasValue 返回 true
,则 Value 属性返回值。 不然会引起 InvalidOperationException。code
还可将 ==
和 !=
运算符用于能够为 null 的类型,如如下示例所示:if (x != null) y = x.Value;
若是 a
和 b
均为 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 的类型主题。