1. 程式人生 > >C# 參考之文字關鍵字null、true、false、default 以及where

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。

使用 ?? 運算子分配預設值,當前值為空的可空型別被賦值給非空型別時將應用該預設值,如int? x = null; int y = x ?? -1;。(例如在相簿管理中,出現為上傳的空影象,則可以用這個算式為其賦予一個default的圖片)

不允許使用巢狀的可空型別。將不編譯下面一行: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)
      {
          
      case1
              Console.WriteLine(
      "Lee");
              
      break;
          
      case2:
              Console.WriteLine(
      "Tang");
              
      break;
          
      default:
              Console.WriteLine(
      "Sorry, no one match this ID!");
              
      break;
      }
  2. 在泛型類和泛型方法中產生的一個問題是,在預先未知以下情況時,如何將預設值分配給引數化型別 T:
    • T 是引用型別還是值型別。

    • 如果 T 為值型別,則它是數值還是結構。

    • publicclass 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子句要求泛型型別實現一個藉口,或者派生某個基類。

相關推薦

C# 參考文字關鍵字nulltruefalsedefault 以及where

null null 關鍵字是表示不引用任何物件的空引用的文字值。 null 是引用型別變數的預設值。 C# 2.0 引入了可為空值的型別,這是可以設定成未定義值的資料型別。可為空值的型別可以表示一般型別的基礎值範圍內的值,在加上一個null值,其相當於通常值型別與n

C#基礎this關鍵字

引用 med 重寫 eth struct matching BE strong spl 1.限定類似名稱隱藏的成員 1 public Employee(string name, string alias) 2 { 3 // Use this to qual

C語言volatile關鍵字

volatile: volatile提醒編譯器它後面的定義隨時可能改變,因此編譯後的程式每次需要儲存或讀取這個變數時,都會直接從變數地址讀取資料。因此CPU訪問暫存器的速度要快過RAM,所以編譯器一般為了提高效率,會將變數放在暫存器中,通過訪問暫存器來讀取變數。但是這樣會造

C++11final關鍵字

時間:2014.06.05 地點:基地 ----------------------------------------------------------------------------- 一、禁用繼承 C++11中允許將類標記為final,方法時直接在類名稱後面使用

在php中 的 0 1和falsetrue

在判斷語句中,當返回值含有0時,可以用===來判斷是否完全相等 如果用===判斷0和false是否相等,結果為不相等(全等於是值和型別都相等) 0==false,結果為相等(只是值相等) <?php $str1 = null; $str2 = false;

21.C++- ++操作符重載隱式轉換explicit關鍵字類的類型轉換函數

inf 我們 bug 操作符 臨時對象 blog 返回值 cnblogs 文章 ++操作符重載 ++操作符分為前置++和後置++,比如: ++a; a++; ++操作符可以進行全局函數或成員函數重載 重載前置++操作符不需要參數 重載後置++操作符需要一個int類型的占

Effective C++筆記八:template中的classtypename關鍵字

       template 宣告式中,class 和 typename 這兩個關鍵字意義完全相同 template<class T> class Widget; template<typename T> class Widget;    

[C#] StringFormat詳解文字方向對齊

在使用GDI方式處理文字時,往往會用到StringFormat。裡面的某些點有點反直覺,不夠直觀,所以本篇就通過圖文的方式去講解一下。 本篇內容僅涉及到文字方向、對齊的相關內容。 如有錯誤、不妥之處,歡迎大家指正。 一、相關屬性 與文字方向、對齊相關的屬性,主要與三個屬性有關: Alignment、LineA

C#out修飾符ref修飾符params修飾符的簡單介紹

c# 一個 邏輯 本地 style 逗號 註意 可變 修飾 一、out修飾符   1、調用一個帶有輸出參數的方法也需要使用out 修飾符,但是作為輸出變量傳遞的本地變量在將他們作為輸出變量傳遞前不需要賦值(因為調用後會改變或丟失),編譯器允 許你傳遞未分

C#基礎參數(二) 數組參數可選參數與命名參數

編譯器 line 示例 報錯 一個 傳遞 for 介紹 public   這次介紹的三個參數皆屬於語法糖。   4.數組參數    聲明方法時,在形參前加params關鍵字。簡化了參數調用,增加了可讀性。   用法:   (1)在參數為數組時使用   (2)每個方法只能有一

【轉載】C#掃盲:帶你掌握C#的擴展方法以及探討擴展方法的本質註意事項

title [] 很多 標記 真的 參考資料 console 需求 length 1、為什麽需要擴展方法 .NET3.5給我們提供了擴展方法的概念,它的功能是在不修改要添加類型的原有結構時,允許你為類或結構添加新方法。 思考:那麽究竟為什麽需要擴展方法呢,為什麽不直接修

(轉)C語言原碼反碼和補碼

計算機 進制 情況下 class 正數 去掉 都是 OS 原碼 原碼、反碼和補碼 1).數據在內存中存儲的時候都是以二進制的形式存儲的. int num = 10; 原碼、反碼、補碼都是二進制.只不過是二進制的不同的表現形式. 數據是以補碼

8C語言函數

開始 span 作用域 執行 系統 發的 改變 棧區 ror 一、函數淺析 1、函數   函數是一個可以反復使用的程序段,從其它的程序段中均可以通過調用語句來使用這個程序段,完成既定的工作   說明:   (1)建立函數稱為“函數定義”,使用函數稱為“函數調用”   (2)

9C語言預處理命令

() body 重復 分號 stdio.h ifdef 可用 style 處理 預處理命令   基本概念:ANSI C標準規定可以在C源程序中加入一些“預處理命令”,以改進程序設計環境,提高編程效率。   這些預處理命令是由ANSI C同一規定的,但是它們不是C語言本身的組

10C語言指針

定義 移動 指針 存儲位置 nbsp 指向 clas 逆運算 OS 指針 一、地址和指針的概念     在程序中定義一個變量,在編譯時就會給這個變量分配一個內存單元,同時根據變量的類型決定這個內存單元的大小。   內存中每一個字節都有一個編號,就是地址   對每一個變量,它

11C語言結構體和共用體

結構體數組 結構體 float add font sco 規則 student mon 一、結構體   結構體:是一種自定義的構造數據類型   用途:把不同類型的數據組合成一個整體。     結構體類型定義:     struct [結構體名]    {       類型識

C語言棧區堆區

空間 bsp 動態 info cat malloc 分享圖片 code clu 一 局部變量存放在棧區中,函數調用結束後釋放內存空間。 #include "stdio.h"; #include "stdlib.h"; int *getNum(){ int i

C#元件errorProvider eventLoghelpProviderperformanceCounter

errorProvider 給控制元件繫結錯誤訊息 errorProvider1.SetError(textBox1, "錯誤提示訊息"); eventLog 寫入Windows事件日誌 EventLog類在System.Diagnostics名稱空間中。可以在“管理工具” > "

JavaScript教程筆記(2)-關於nullundefinedtruefalse

1 null和undefined 1.1 定義 null和undefined都表示“沒有”,實際上,將一個變數賦值為null或undefined,語法效果幾乎一樣。它們的區別是:null是一個表示“空”的物件,轉為數值時為0;undefined是一個表示“未定義”的值,轉為數值時

C#學習ObjectOrientedRecord

一、思維導圖   二、知識點析剖 1、面向物件 (1)類:當一個窗體程式碼太多時,不便於檢視和寫入,可以使用類來簡化程式碼視窗,使用get關鍵字來獲取一個公有屬性的值,          而使用set來設定一個公有屬性的值,如:&nbs