一、可空類型(Nullable Type)表示在值類型的正常取值範圍內再加上一個null值,聲明一個可空類型的標準語句如下: 例如,聲明一個可空整數類型並賦值為null: 1.可空類型是泛型結構Nullable<T>的實例,其聲明為:public struct Nullable<T> where T ...
一、可空類型(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/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。