null
null 關鍵字是表示不引用任何對象的空引用的文字值。
- null 是引用類型變量的默認值。
- C# 2.0 引入了可爲空值的類型,這是可以設置成未定義值的數據類型。可爲空值的類型可以表示一般類型的基礎值範圍內的值,在加上一個null值,其相當於通常值類型與null的並集。
可空類型 是 System.Nullable 結構的實例。
System.Nullable<T>
// 或簡寫爲
T?
// 兩者可以互換,T爲值類型
- 可空類型表示可被賦值爲 null 值的值類型變量。無法創建基於引用類型的可空類型。
- 如果基礎類型的值爲 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;。(例如在相冊管理中,出現爲上傳的空圖像,則可以用這個算式爲其賦予一個default的圖片)
不允許使用嵌套的可空類型。將不編譯下面一行:Nullable<Nullable<int>> n;
true & false
可以作爲運算符和標識符
- 如果類型定義了 true 運算符,它還必須定義 false 運算符。
- 類型不能直接重載條件邏輯運算符(&& 和 ||),但通過重載規則邏輯運算符和 true 與 false 運算符可以達到同樣的效果。
default
default 關鍵字可在 switch 語句或泛型代碼中使用。
- 如果沒有任何 case 表達式與開關值匹配,則控制傳遞給跟在可選 default 標籤後的語句。如果沒有 default 標籤,則控制傳遞到 switch 以外。
-
int id = int32.Parse(Console.ReadLine());
switch (id)
{
case 1:
Console.WriteLine("Lee");
break;
case 2:
Console.WriteLine("Tang");
break;
default:
Console.WriteLine("Sorry, no one match this ID!");
break;
}
-
- 在泛型類和泛型方法中產生的一個問題是,在預先未知以下情況時,如何將默認值分配給參數化類型 T:
-
T 是引用類型還是值類型。
-
如果 T 爲值類型,則它是數值還是結構。
-
public class GenericClass<T>
{
public T DoSTH(arg)
{
T temp = default(T);
if (arg != null)
{
temp = arg.Favs;
}
return temp;
}
//
}
給定參數化類型 T 的一個變量 t,只有當 T 爲引用類型時,語句 t = null 纔有效;只有當 T 爲數值類型而不是結構時,語句 t = 0 才能正常使用。解決方案是使用 default 關鍵字,此關鍵字對於引用類型會返回空,對於數值類型會返回零。對於結構,此關鍵字將返回初始化爲零或空的每個結構成員,具體取決於這些結構是值類型還是引用類型。
-
Where
where在泛型中的作用是:指定泛型類型可用的方法和屬性。where子句要求泛型類型實現一個藉口,或者派生某個基類。