C# 可空类型
C# 提供了一个特殊的数据类型,nullable 类型(可空类型),可空类型可以表示其基础值类型正常范围内的值,再加上一个 null
值。
例如,Nullable< Int32 >
,读作”可空的 Int32
“,可以被赋值为 -2,147,483,648
到 2,147,483,647
之间的任意值,也可以被赋值为 null
值。类似的,Nullable< bool >
变量可以被赋值为 true
或 false
或 null
。
在处理数据库和其他包含可能未赋值的元素的数据类型时,将 null
赋值给数值类型或布尔型的功能特别有用。例如,数据库中的布尔型字段可以存储值 true
或 false
,或者,该字段也可以未定义。
声明一个 nullable 类型(可空类型)的语法如下:
1 2 |
< data_type> ? <variable_name> = <span class="hljs-keyword">null</span>; |
下面的实例演示了可空数据类型的用法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<span class="hljs-keyword">using</span> System; <span class="hljs-keyword">namespace</span> <span class="hljs-title">CalculatorApplication</span> { <span class="hljs-keyword">class</span> <span class="hljs-title">NullablesAtShow</span> { <span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">Main</span>(<span class="hljs-params"><span class="hljs-keyword">string</span>[] args</span>) </span>{ <span class="hljs-keyword">int</span>? num1 = <span class="hljs-keyword">null</span>; <span class="hljs-keyword">int</span>? num2 = <span class="hljs-number">45</span>; <span class="hljs-keyword">double</span>? num3 = <span class="hljs-keyword">new</span> <span class="hljs-keyword">double</span>?(); <span class="hljs-keyword">double</span>? num4 = <span class="hljs-number">3.14157</span>; <span class="hljs-keyword">bool</span>? boolval = <span class="hljs-keyword">new</span> <span class="hljs-keyword">bool</span>?(); <span class="hljs-comment">// 显示值</span> Console.WriteLine(<span class="hljs-string">"显示可空类型的值: {0}, {1}, {2}, {3}"</span>, num1, num2, num3, num4); Console.WriteLine(<span class="hljs-string">"一个可空的布尔值: {0}"</span>, boolval); Console.ReadLine(); } } } |
当上面的代码被编译和执行时,它会产生下列结果:
1 2 3 |
显示可空类型的值: , <span class="hljs-number">45</span>, , <span class="hljs-number">3.14157</span> 一个可空的布尔值: |
Null 合并运算符( ?? )
Null
合并运算符用于定义可空类型和引用类型的默认值。Null
合并运算符为类型转换定义了一个预设值,以防可空类型的值为 Null
。Null
合并运算符把操作数类型隐式转换为另一个可空(或不可空)的值类型的操作数的类型。
如果第一个操作数的值为 null
,则运算符返回第二个操作数的值,否则返回第一个操作数的值。下面的实例演示了这点:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<span class="hljs-keyword">using</span> System; <span class="hljs-keyword">namespace</span> <span class="hljs-title">CalculatorApplication</span> { <span class="hljs-keyword">class</span> <span class="hljs-title">NullablesAtShow</span> { <span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">Main</span>(<span class="hljs-params"><span class="hljs-keyword">string</span>[] args</span>) </span>{ <span class="hljs-keyword">double</span>? num1 = <span class="hljs-keyword">null</span>; <span class="hljs-keyword">double</span>? num2 = <span class="hljs-number">3.14157</span>; <span class="hljs-keyword">double</span> num3; num3 = num1 ?? <span class="hljs-number">5.34</span>; Console.WriteLine(<span class="hljs-string">"num3 的值: {0}"</span>, num3); num3 = num2 ?? <span class="hljs-number">5.34</span>; Console.WriteLine(<span class="hljs-string">"num3 的值: {0}"</span>, num3); Console.ReadLine(); } } } |
当上面的代码被编译和执行时,它会产生下列结果:
1 2 |
num3 的值: <span class="hljs-number">5.34</span> num3 的值: <span class="hljs-number">3.14157</span> |