一個? 兩個??黑人問號


前言

相信大家在寫Code的時候應該很常在茫茫code海中看到各種符號吧!像是!、≠、?、??…之類的。第一次看到雙問號的時候腦袋先浮現黑人問號的畫面xD想說這到底是什麼鬼。今天就來探討一下問號們的用途吧!

單問號

最常見的應該是單問號(應該吧?至紹我一開始學程式是先遇到單問號啦)單問號有兩種用法

  1. 對於無法直接賦予null的型別表示可為Null

    像是實值型別(e.g.結構、列舉)這些型別,在沒有值的情況下,會被賦予默認值而無法直接賦予null。

    e.g.

     int a //默認值為0
     int? b //默認值為null
     int c = null //這樣寫會報錯:無法將Null轉成int,因為他是不可為null的實質類型
    
  2. 三元運算式

    我覺得他類似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

結論

雖然這些符號看起來很可怕,但如果能善用在開發上可是有大大的幫助阿!


Reference

https://dotblogs.com.tw/Im_sqz777/2017/08/17/222734

#C#






你可能感興趣的文章

動態型別

動態型別

〈 C++學習日記 #1〉指標 Pointer (Part.1)

〈 C++學習日記 #1〉指標 Pointer (Part.1)

關於 .gitignore

關於 .gitignore






留言討論