C#中的可空類型


  一、可空類型(Nullable Type)表示在值類型的正常取值范圍內再加上一個null值,聲明一個可空類型的標准語句如下:

T? myNullableNum = rangedNum/new T?() or null; //其中T需要為值類型

  例如,聲明一個可空整數類型並賦值為null:

int? myNullableInt = null; //或使用為new int?()

  1.可空類型是泛型結構Nullable<T>的實例,其聲明為:public struct Nullable<T> where T : struct,語法T?是Nullable<T>的簡寫形式,這兩種形式是等效的:

Nullable<int> myNullableInt = new Nullable<int>();

  ※根據聲明可以看出,其基礎類型T可以是包括struct和enum在內的任何值類型,不能是引用類型,也不能是可空類型,即可空類型不能嵌套使用;可空類型依然是值類型,且為結構類型;

  ※直接將普通類型或null賦值給可空類型是隱式轉換的結果;

  二、可空類型包含以下實例成員:

  1.HasValue:只讀屬性,判斷是否有值,如果當前值非空,返回true,否則返回false

  2.Value:只讀屬性,如果當前值非空,可以正常訪問,否則說明Value不包含有意義的值,此時訪問Value時會拋出異常InvalidOperationException

  3.GetValueOrDefault():實例方法,如果當前值非空(HasValue為true),返回Vlaue的值,否則返回T類型的默認值(即私有字段value的默認值)

  4.GetValueOrDefault (T defaultValue):實例方法,如果當前值非空(HasValue為false),返回Vlaue的值,否則返回默認值defaultValue

  三、如果將可空類型轉換為其基礎類型,需要使用強制轉換或其Value屬性獲取:

int myInt = (int)myNullableInt;
int myInt = myNullableInt.Value;
//以上兩種方式,在可空類型實例為null時會拋出異常,可以使用以下方式代替
int myInt = myNullableInt.GetValueOrDefault(); //其重載方法可以傳入默認值

  四、可空類型可以使用其基礎類型中自定義的運算符重載和類型轉換,如果操作數不包含null,則運算結果與其基礎類型的運算結果一致,如果操作數包含null,則運算結果為null,在運算過程中,實際上是調用的可空類型的實例方法GetValueOrDefault()參與運算:

int? myNullableInt = 100;
int? myNum = myNullableInt + 200;

  五、對可空類型使用比較運算符時,如果其中一個可空類型的值為null,而另一個為非null,則除!=(不等於)外,所有比較的計算結果均為false,所以並不是某個比較返回false,其相反的情況一定會返回true;

 


如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的認可是我寫作的最大動力!

作者:Minotauros
出處:https://www.cnblogs.com/minotauros/

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM