天天看點

C# 參考之文字關鍵字null、true、false、default 以及where

null

null 關鍵字是表示不引用任何對象的空引用的文字值。

  1. null 是引用類型變量的預設值。
  2. C# 2.0 引入了可為空值的類型,這是可以設定成未定義值的資料類型。可為空值的類型可以表示一般類型的基礎值範圍内的值,在加上一個null值,其相當于通常值類型與null的并集。

可空類型 是 System.Nullable 結構的執行個體。

System.Nullable < T >

//  或簡寫為

T?

//  兩者可以互換,T為值類型

  1. 可空類型表示可被指派為 null 值的值類型變量。無法建立基于引用類型的可空類型。
  2. 如果基礎類型的值為 null,請使用 System.Nullable.GetValueOrDefault 屬性傳回該基礎類型所賦的值或預設值,例如 int j = x.GetValueOrDefault();
  3. 請使用 HasValue 和 Value 隻讀屬性測試是否為空和檢索值,例如 if(x.HasValue) j = x.Value;
      • 如果此變量包含值,則 HasValue 屬性傳回 True;或者,如果此變量的值為空,則傳回 False。
      • 如果已指派,則 Value 屬性傳回該值,否則将引發 System.InvalidOperationException。
      • 可空類型變量的預設值将 HasValue 設定為 false。未定義 Value。
  4. 使用 ?? 運算符配置設定預設值,目前值為空的可空類型被指派給非空類型時将應用該預設值,如int? x = null; int y = x ?? -1;。(例如在相冊管理中,出現為上傳的空圖像,則可以用這個算式為其賦予一個default的圖檔)
  5. 不允許使用嵌套的可空類型。将不編譯下面一行:Nullable<Nullable<int>> n;

true & false

可以作為運算符和辨別符

  1. 如果類型定義了 true 運算符,它還必須定義 false 運算符。
  2. 類型不能直接重載條件邏輯運算符(&& 和 ||),但通過重載規則邏輯運算符和 true 與 false 運算符可以達到同樣的效果。

default

default 關鍵字可在 switch 語句或泛型代碼中使用。

  1. 如果沒有任何 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 ;

      }

  2. 在泛型類和泛型方法中産生的一個問題是,在預先未知以下情況時,如何将預設值配置設定給參數化類型 T:
    • T 是引用類型還是值類型。
    • 如果 T 為值類型,則它是數值還是結構。
    • public   class  GenericClass < T >

      {

           public  T DoSTH(arg)

          {

              T temp  =   default (T);

               if  (arg  !=   null )

              {

                  temp  =  arg.Favs;

              }

               return  temp;

          }

           //

      C# 參考之文字關鍵字null、true、false、default 以及where

      }

      給定參數化類型 T 的一個變量 t,隻有當 T 為引用類型時,語句 t = null 才有效;隻有當 T 為數值類型而不是結構時,語句 t = 0 才能正常使用。解決方案是使用 default 關鍵字,此關鍵字對于引用類型會傳回空,對于數值類型會傳回零。對于結構,此關鍵字将傳回初始化為零或空的每個結構成員,具體取決于這些結構是值類型還是引用類型。  

Where

      where在泛型中的作用是:指定泛型類型可用的方法和屬性。where子句要求泛型類型實作一個借口,或者派生某個基類。