1、int? 關鍵字說明
(1)、int? 表示一個int類型,且該int類型可空,如果不加?的話,那么int類型的默認值為0,不能賦null值,代碼如下:
int aa = null;
(2)、當給一個變量定義成int?類型的時候,那么我們在給其賦初值的時候,可以賦null,也可以賦0.
(3)、int??:用於判斷並賦值,先判斷當前變量是否為null,如果是就可以賦役個新值,否則跳過,代碼如下:
static void Main(string[] args) { int? aa = 1; Console.WriteLine(aa ?? 0); }
輸出:
2、?(Nullable)
Nullable是.NET 2.0中新提供的一種用於標記一個值類型是否可以為空的技術。
對於一個類型,我們既可以給它賦一個值,也可以給它分配一個空引用,我們就說這個類型是可空的,因此:
(1)、類似string的引用類型就是可空類型
(2)、像int32等的值類型就不是可空類型,因為它們不能賦null值,因為Nullable(?)結構將支持值類型擴展成可空類型,但是不支持引用類型,應為它們原本就是可空類型
3、可空類型具有以下特征
(1)、可空類型表示可被賦值為 null 值的值類型變量。無法創建基於引用類型的可空類型。(引用類型已支持 null 值。)。
(2)、語法 T? 是 System.Nullable<T> 的簡寫,此處的 T 為值類型。這兩種形式可以互換。
(3)、為可空類型賦值與為一般值類型賦值的方法相同,如 int? x = 10; 或 double? d = 4.108;
(4)、如果基礎類型的值為 null,請使用 System.Nullable.GetValueOrDefault 屬性返回該基礎類型所賦的值或默認值,例如 int j = x.GetValueOrDefault();
(5)、請使用 HasValue 和 Value 只讀屬性測試是否為空和檢索值,例如 if(x.HasValue) j = x.Value;
(6)、如果此變量包含值,則 HasValue 屬性返回 True;或者,如果此變量的值為空,則返回 False
(7)、如果已賦值,則 Value 屬性返回該值,否則將引發 System.InvalidOperationException
(8)、可空類型變量的默認值將 HasValue 設置為 false。未定義 Value
(9)、使用 ?? 運算符分配默認值,當前值為空的可空類型被賦值給非空類型時將應用該默認值,如 int? x = null; int y = x ?? -1;
(10)、不允許使用嵌套的可空類型。將不編譯下面一行:Nullable<Nullable<int>> n;
4、代碼示例:
static void Main() { int? num = null; //可空類型如果設置為默認值為null的話,那么系統將會把HasValue屬性設置為false if (num.HasValue == true) { System.Console.WriteLine("num = " + num.Value); } else { System.Console.WriteLine("num = Null"); } int y = num.GetValueOrDefault(); //如果將可空類型的默認值設置為null,那么如果此時獲取其Value屬性,那么系統將會報(System.InvalidOperationException)錯 try { y = num.Value; } catch (System.InvalidOperationException e) { System.Console.WriteLine(e.Message); } }