C# 可空类型(Nullable)
C# 单文号? 与 双问号??
?:单问号用于对int,double,bool等无法直接赋值为null的数据类型进行null的赋值,意思是这个数据类型是Nullable类型的。
int? i=3; 等同于 Nullable<int> i = new Nullable<int>(3); int i; //默认值0 int?i; //默认值null
?? :双问号 可用于判断一个变量在位null时返回一个指定的值。
接下来详细说明。
C# 可空类型(Nullable)
C# 提供了一个特殊的数据类型,nullable类型(可空类型),可空类型可以表示其基础值类型正常范围内的值,再加上一个null值。
例如,Nullable<int32>,读作“可空的int32”,可以被赋值为-2,147,483,648到2,147,483,647之间的任意值,也可以被赋值为null值。
类似于,Nullable<bool>变量可以被赋值为true或false或者null。
声明一个nullable类型(可控类型)的语法如下:
<data_type>?<variable_name> = null;
下面实例演示了可空数据类型的用法:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace nullable { class Program { static void Main(string[] args) { int? num1 = null; int? num2 = 45; double? num3 = new double?(); double? num4 = 2.1415926; bool? boolval = new bool?(); Console.WriteLine($"显示可空类型{num1},{num2},{num3},{num4}"); Console.WriteLine($"一个可空的布尔值:{boolval}"); Console.ReadLine(); } } }
当上面的代码被编译和执行时,它会产生下列结果:
Null 合并运算符(??)
Null合并运算符用于定义可空类型和引用类型默认值。Null合并运算符为类型转换定义了一个预设值,以防可空类型的值为Null。
Null合并运算符把操作数类型隐式转换为另一个可空(或不可空)的值类型的操作数的类型。
如果一个操作数的值问null,则运算符翻译第二个操作数的值,否则返回第一个操作数的值。下面的实例显示了这一点:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace nullable { class Program { static void Main(string[] args) { double? num1 = null; double? num2 = 3.1415926; double num3; num3 = num1 ?? 5.55; Console.WriteLine($"num3的值:{num3}"); num3 = num2 ?? 5.34; Console.WriteLine($"num3的值:{num3}"); Console.ReadLine(); } } }
当上面的代码被编译和执行时,他会产生下列结果: