1.可空類型修飾符(?) 眾所周知,在C#中引用類型可以使用一個null引用來表示一個不存在的值,比如 string str = null 是正確的; 但是值類型卻不能為空,比如 int k = null 那麼編譯器就會報錯; 為了讓值類型也可以為空,就需要使用可空類型,即用可空類型修飾符 "?" ...
1.可空類型修飾符(?)
眾所周知,在C#中引用類型可以使用一個null引用來表示一個不存在的值,比如 string str = null 是正確的;
但是值類型卻不能為空,比如 int k = null 那麼編譯器就會報錯;
為了讓值類型也可以為空,就需要使用可空類型,即用可空類型修飾符 "?" 來表示,舉例如:
int? 表示可空的整形,DateTime? 表示可為空的時間。這樣我們就可以寫int? k = null 而不報錯。
它的表現形式為 "T?" ,T? 其實是System.Nullable(泛型結構)的縮寫形式,
也就意味著當你用到T?時編譯器編譯時會把T?編譯成System.Nullable的形式。
例如:int?,編譯後便是System.Nullable的形式。
2.NULL檢查運算符(?.)
?. 可以作為是否為NULL的檢查運算符。讓我們舉個例子:
現在要獲取某點的X值,那麼我們就需要判斷該點是否為空,代碼可以寫成:
int? firstX = null;
if (points != null)
{
//獲取該集合中首個元素
var first = points.FirstOrDefault();
if (first != null){firstX = first.X;}
}
而現在我們可以簡寫這個代碼,在C# 6.0中,引入了一個 ?. 的運算符,前面的代碼可以改成如下形式:
int? firstX = points?.FirstOrDefault()?.X;
從這個例子中我們也可以看出它的基本用法:如果對象為NULL,則不進行後面的獲取成員的運算,直接返回NULL。
3.空合併運算符(??)
用於定義可空類型和引用類型的預設值。
如果此運算符的左操作數不為null,則此運算符將返回左操作數,否則返回右操作數。例如:
a??b 當a為null時則返回b,a不為null時則返回a本身。
空合併運算符為右結合運算符,即操作時從右向左進行組合的。
如,“a??b??c”的形式按“a??(b??c)”計算。
4.三元(運算符)表達式(?: )
例如:x == 0 ? y : z 表示如果表達式 x == 0 為true,則返回y;
如果 x == 0 為false,則返回 z,是省略 if{} else{} 的簡單形式。
本質:都使用了語法糖,在編譯階段編譯器會把特殊符號先轉譯成原始狀態再編譯。
學無止境,積少成多,與看到的你共勉。