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(); } } }
當上面的代碼被編譯和執行時,他會產生下列結果: