?? 運算子(C# 參考)
?? 運算子稱為 null 合并運算子,用於定義可以為 null 值的類型和參考型別的預設值。 如果此運算子的左運算元不為 null,則此運算子將返回左運算元;否則返回右運算元。
View Code
1 class NullCoalesce 2 { 3 static int? GetNullableInt() 4 { 5 return null; 6 } 7 8 static string GetStringValue() 9 {10 return null;11 }12 13 static void Main()14 {15 // ?? operator example.16 int? x = null;17 18 // y = x, unless x is null, in which case y = -1.19 int y = x ?? -1;20 21 // Assign i to return value of method, unless22 // return value is null, in which case assign23 // default value of int to i.24 int i = GetNullableInt() ?? default(int);25 26 string s = GetStringValue();27 // ?? also works with reference types. 28 // Display contents of s, unless s is null, 29 // in which case display "Unspecified".30 Console.WriteLine(s ?? "Unspecified");31 }32 }
:: 運算子(C# 參考)
命名空間別名限定符 (::) 用於尋找標識符。 它通常放置在兩個標識符之間,例如:
global::System.Console.WriteLine("Hello World");
===============================================================================
(下面內容轉至http://www.cnblogs.com/firstcsharp/archive/2011/12/11/2283797.html)
int?:表示可空類型,就是一種特殊的實值型別,它的值可以為null
用於給變數設初值得時候,給變數(int類型)賦值為null,而不是0
int??:用於判斷並賦值,先判斷當前變數是否為null,如果是就可以賦役個新值,否則跳過
1 public int? a=null;2 public int b()3 {4 return this.a ?? 0;5 }
實值型別後面加問號表示可為空白null(Nullable 結構)
Nullable是.NET 2.0中新提供的一種用於標明一個實值型別是否可以為空白的技術。
對於一個類型,如果既可以給它分配一個值,也可以給它分配Null 參考null(表示沒有任何值),我們就說這個類型是可空的。
因此,可空類型可表示一個值,或表示不存在任何值。例如,類似 String 的參考型別就是可空類型,而類似 Int32 的實值型別不是可空類型。Nullable 結構支援將實值型別擴充為可以為null,但不支援在參考型別上使用,因為參考型別本身就是可空的。
因為實值型別的容量只夠表示適合於該類型的值,因此它不可為空白;實值型別沒有表示空值所需的額外容量。
例:public int? age;
補充:其它的類型後加問題也是同樣的道理。
int? num = null; 正確
int num=null; 錯誤
---------------------------------------------------------------------------------------------------------------------------
微軟MSDN是提示如下例子:
http://msdn.microsoft.com/zh-cn/support/1t3y8s4s(VS.80).aspx
1 class NullableExample 2 { 3 static void Main() 4 { 5 int? num = null; 6 if(num.HasValue == true) 7 { 8 System.Console.WriteLine("num = " + num.Value); 9 }10 else11 {12 System.Console.WriteLine("num = Null");13 } //y is set to zero 14 int y = num.GetValueOrDefault();15 // num.Value throws an InvalidOperationException if num.HasValue is false 16 try17 {18 y = num.Value;19 }20 catch(System.InvalidOperationException e)21 {22 System.Console.WriteLine(e.Message);23 }24 }25 }
以上將顯示輸出:
num = Null
Nullable object must have a value.
可空類型概述
可空類型具有以下特性:
可空類型表示可被賦值為 null 值的實值型別變數。無法建立基於參考型別的可空類型。(參考型別已支援 null 值。)。
文法 T? 是 System.Nullable<T> 的簡寫,此處的 T 為實值型別。這兩種形式可以互換。
為可空類型賦值與為一般實值型別賦值的方法相同,如 int? x = 10; 或 double? d = 4.108;。
如果基礎類型的值為 null,請使用 System.Nullable.GetValueOrDefault 屬性返回該基礎類型所賦的值或預設值,例如 int j = x.GetValueOrDefault();
請使用 HasValue 和 Value 唯讀屬性測試是否為空白和檢索值,例如 if(x.HasValue) j = x.Value;
如果此變數包含值,則 HasValue 屬性返回 True;或者,如果此變數的值為空白,則返回 False。
如果已賦值,則 Value 屬性返回該值,否則將引發 System.InvalidOperationException。
可空類型變數的預設值將 HasValue 設定為 false。未定義 Value。
使用 ?? 運算子分配預設值,當前值為空白的可空類型被賦值給非空類型時將應用該預設值,如 int? x = null; int y = x ?? -1;。
不允許使用嵌套的可空類型。將不編譯下面一行:Nullable<Nullable<int>> n;