可以为 null 的类型
class NullableExample { static void Main() { int? num = null; // Is the HasValue property true? if (num.HasValue) { System.Console.WriteLine("num = " + num.Value); } else { System.Console.WriteLine("num = Null"); } // y is set to zero int y = num.GetValueOrDefault(); // num.Value throws an InvalidOperationException if num.HasValue is false try { y = num.Value; } catch (System.InvalidOperationException e) { System.Console.WriteLine(e.Message); } } }
可以为 null 的类型概述
可以为 null 的类型表示可被赋值为 null 值的值类型变量。 无法创建基于引用类型的可以为 null 的类型。 (引用类型已支持 null 值。) 语法 T? 是 Nullable<T> 的简写,此处的 T 为值类型。 这两种形式可以互换。 为可以为 null 的类型赋值的方法与为一般值类型赋值的方法相同,如 int? x = 10; 或 double? d = 4.108。 对于可以为 null 的类型,也可向其赋 null: int? x = null. 值 如果基础类型的值为 null,请使用 Nullable<T>.GetValueOrDefault 方法返回该基础类型所赋的值或默认值,例如 int j = x.GetValueOrDefault(); 将 HasValue 和 Value 只读属性用于测试是否为空和检索值,如下面的示例所示: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;
相关章节
C# 语言规范
有关更多信息,请参见C# 语言规范。 该语言规范是 C# 语法和用法的权威资料。