C# 2.0中的可空類型以及?和??

來源:互聯網
上載者:User

 最近在學習C# 2.0,在.NET Framework 2.0中新增加了System.Nullable泛型結構,它具有處理實值型別資料具和處理null的功能。例如:

System.Nullable<int> i = 2;
i = null;
System.Nullable<bool> b = null;

    另外C#中還提供了上述表示方法的簡寫形式:

int? i = null;
bool? b = null;

    此時,i除了可以正常處理int值外還可以被賦值為null;b則可以處理true、false和null值。感覺上好像“實值型別可以處理null”似的,實際上,上面的System.Nullable<int>是對int的一種擴充,前者可被稱為“可空的int”,後者被稱為“非空的int”,它們所指的並非同一事物。因此,當把一個可空類型值賦給一個非空類型時,將引發編譯錯誤,例如:

int? ni = null;
int i = ni;  //這一句將引發編譯錯誤

    推薦的方法是賦值前對可空類型的值進行檢查,在C#中使用??運算子分配預設值,如:

int? ni = null;
int i = ni ?? 0;

    ??運算子會首先判斷左運算元是否為空白,如果為空白則返回??後面給出的預設值,否則返回左運算元,其意義類似於:

int? ni = null;
int i = ni.HasValue ? ni.Value : 0;

    提醒:System.Nullable<int>並不等同於int,實值型別還是實值型別,int類型不能處理null,System.Nullable<int>是一種新的結構類型,被用來處理int類型資料和null。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.