1:可空值類型
可空值類型是System.Nullable<T>這個struct的類型
可空值類型除了可以正確的表示其底層數據類型(也就是T)的范圍,還可以表示null
1.1:如下,bool值類型可以為True和False,但不能為Null
Nullable<bool>除了可以為True和False外,還可以為Null
1.2:Nullable寫起來太麻煩,這里有簡便寫法,只需要在類型后面加個?即可,如下
2:Null,空,空白string
string name = "張三"; //正常字符串,有值非空 string name1 = null; //值為null string name2 = ""; //是個空字符串 string name3 = " ";//空白字符串,雙引號之間是空格或者Tab鍵
2.1:如何判斷Null,空,空白string
2.1.1:判斷Null
string name = null; if (name == null) { //... }
2.1.2:判斷空,雙引號之間啥也沒有那種,下面的這個方法同樣也包含了字符串為Null的這種情況
string name2 = ""; if (string.IsNullOrEmpty(name2)) { //... }
2.1.3:判斷空白字符串,也可能是空字符串,也可能是Null字符串,就用下面這個
string name3 = " "; if (string.IsNullOrWhiteSpace(name3)) { //... }
3:Nullable<T>的常用屬性和方法
.HasValue //如果值為null,結果就是false; 否則:true
.Value //底層值類型的值,如果Nullable<T>的值是Null,就會報異常
.GetValueOrDefault() //底層值類型的值或該類型的默認值,意思就是如果你的值不為Null,就會把值返回回來;如果是Null,就返回這個值的默認值,int的默認值是0,所以第二個圖返回0
.GetValueOrDefault(默認值)//底層值類型的值或指定的默認值,意思就是可以指定默認值,不為Null就返回底層值類型;如果為Null就返回默認值
4:Nullable<T>轉換
T ---> Nullable<T> 隱式轉換,因為后面的比前面的值的范圍大,多了一個Null值
如下圖:從范圍小的a轉換成范圍大的b就直接隱式轉換,前提這個范圍大的要包含范圍小的類型才可以
Nullable<T> ---> T ,反而言之,就得顯示轉換,如圖一錯二對:
如果值為Null,就會報異常,如圖:
5:檢查Null的操作符
條件操作符(三元運算符)?:
Null合並操作符 ?? 如果左邊a不為Null,返回左邊a的值;如果a為Null,返回b的值
Null條件操作符 ?.
Null條件操作符還有 ?[ 針對索引表示法的Null條件操作符
6:string str = null,string str1 = “”,string str2 = string.empty;的區別
string str = null;在棧上有地址,但在堆上沒有空間;null是string的默認值
string str1 =“”:空字符串,在棧和堆都有地址,並且堆上地址為空
string str2 = string.empty;它和str1差不多,在堆棧都為空間,不同就是在語法級上對str1的優化