一、含义:
可以为null的类型,表示为该值在该类型范围中,还可以取null值。
比如:int值是-2,147,483,648 到 2,147,483,647 ,默认值是 0,不包含null值,但是int? a=null;就包含null值。
二、声明格式:
可以通过如下两种方式申明可为空的类型:
- System.Nullable<T> variable;
- T?variable;
T
是可以为 null 的类型的基础类型。 T
可以是包括 struct
在内的任意值类型;它不能是引用类型,引用类型已经支持为null。引用类型可以设置为空,表示它未初始化。
三、特征:
-
可以为 null 的类型表示可以向其赋值
null
的值类型变量。 -
语法
T?
是 Nullable<T> 的简写,其中T
是值类型。 这两种形式是可互换的。 -
向可以为 null 的类型赋值的方法与向一般值类型赋值的方法相同,如
int? x = 10;
或double? d = 4.108;
也能够向可以为 null 的类型赋值null
:int? x = null;
。 -
使用 Nullable<T>.GetValueOrDefault 方法可返回分配的值或基础类型的默认值(如果值为
null
的话)。例如,int j = x.GetValueOrDefault();
-
使用 HasValue 和 Value 只读属性可测试是否存在 null 值并检索值,如以下示例所示:
if(x.HasValue) j = x.Value;
-
如果变量包含值,则
HasValue
属性返回true
;如果值为null
,则返回false
。 -
如果已赋值,则
Value
属性返回值。 否则,将会引发 System.InvalidOperationException。 -
HasValue
的默认值为false
。Value
属性没有默认值。 -
还能将
==
和!=
运算符与可以为 null 的类型结合使用,如以下示例所示:if (x != null) y = x;
-
-
将当前值为
null
的可为 null 的类型赋值给不可为 null 的类型时,可以使用??
运算符赋予默认值,例如int? x = null; int y = x ?? -1;
-
不得嵌套可以为 null 的类型。 无法编译下面的一行代码:
Nullable<Nullable<int>> n;
注:参考https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/nullable-types/index