前言
相信大家在寫Code的時候應該很常在茫茫code海中看到各種符號吧!像是!、≠、?、??…之類的。第一次看到雙問號的時候腦袋先浮現黑人問號的畫面xD想說這到底是什麼鬼。今天就來探討一下問號們的用途吧!
單問號
最常見的應該是單問號(應該吧?至紹我一開始學程式是先遇到單問號啦)單問號有兩種用法
對於無法直接賦予null的型別表示可為Null
像是實值型別(e.g.結構、列舉)這些型別,在沒有值的情況下,會被賦予默認值而無法直接賦予null。
e.g.
int a //默認值為0 int? b //默認值為null int c = null //這樣寫會報錯:無法將Null轉成int,因為他是不可為null的實質類型
三元運算式
我覺得他類似if-else的簡化版。
語法格式: 判斷式? 判斷為true要回傳的值 : 判斷為false要回傳的值
舉例: 如果今天下雨,訊息要顯示Rainy Day,晴天則要顯示Sunny Day,用if-else可寫成如下:
bool rain = false; if (rain) { Console.WriteLine("Rainy Day QQ"); } else { Console.WriteLine("Hoooray! Sunny Day"); }
上述情境如果改用三元運算式,則如下
bool rain = false; var e = rain ? "Rainy Day!" : "Hoooray! Sunny Day"; Console.WriteLine(e); //output //Hoooray! Sunny Day
兩個相比之下,三元運算式的寫法看起來俐落許多又能達到相同效果!
雙問號
稱為null合併運算子
引用MSDN上面的解釋:用於定義可以為 null 值的型別和引用型別的預設值。如果此運算子的左運算元不為 null,則此運算子將返回左運算元(左邊表示式);否則當左運算元為 null,返回右運算元(右邊表示式)。
來看實例可能會比較好懂~其實意思就是判斷null合併運算子(??)左邊是否為Null,如果??左邊為null就回傳??右邊的值,如果??左邊不是null則回傳??左邊的值
string c = null;
int? d = 10;
Console.WriteLine($"c {c ?? "is null"}");
Console.WriteLine($"d is {d ?? 0}");
//output
//c is null
//d is 10
結論
雖然這些符號看起來很可怕,但如果能善用在開發上可是有大大的幫助阿!