C# 學習筆記 - 黑人問號,喔不 我是說 「?」啦

C#各種問號使用方式

啊呀...一個出國之後就沒寫文章了

離上一次寫文章過了兩個禮拜了 今天繼續開始寫啦!!!

今天在抓Bug的時候多發現了一個?的使用方式
在講今天發現的東西之前,先記錄一下?可以使用的哪些方式

在C#中常常看到? 而且蠻常被忘記的 所以就乾脆紀錄一下!

主要有以下幾種常見使用方式

  • a==10 ? "是十" : "不是十";

  • int? a;

  • a??0

第一種方式為三元運算式

原本使用If的寫法則如以下程式碼

int a = 10;
if (a == 10)
{
    Console.WriteLine("是十");
}
else
{
    Console.WriteLine("不是十");
}
Console.Read();

以上程式碼可使用三元運算式來表示 

格式為 「判斷式」 ? 「判斷為true回傳的值」:「判斷為false回傳的值」

int a = 10;
Console.WriteLine(a == 10 ? "是十" : "不是十");
Console.Read();

以上程式將會回傳的是「是十」

第二種是將該變數設成可以Null的類型

以一般的程式碼若要將整數int變數設定成null編譯器會直接翻臉給你看,如下圖

若要使其設定為Null則需要將int後面加入「?」即可,編譯器就會息怒喔~

第三種則是雙問號

雙問號左邊的變數為可null才能將變數放在雙問號旁邊喔,否則編譯器一樣會翻臉,如下圖

上圖中可以看見我宣告了b的字串變數,他可以使用,因為字串變數是可null的值
那要如何將a變數放至雙問號左邊呢? 這時候就會用到第二種使用問號的方式來宣告a變數了,如下圖

以上程式碼將會回傳字串100以及整數100,??是判斷其左邊的變數是否為Null 若為Null則回傳右邊的值

「變數」??「左邊的變數為Null的話回傳這個值」

最後一個要說的是今天發現的一個方式

*這個方式稱之為Null 條件運算子

官方文件中有詳細介紹,感謝FB上的大大跟我說,十分感謝!!!

以Thread來做示範,若今天想要將將一個已存在的Thread做Abort之前我會這樣做

var a = new Thread(Show);
a.Start();
if (a != null)
 a.Abort();

上述的程式碼會發現我要用一個if判斷是否為空,如果不是空的我就將執行序Abort掉,而今天發現可以用一行就結束了,就是使用問號來判斷是否為空,可以將If判斷式改為以下程式碼

var a = new Thread(Show);
a.Start();
a?.Abort();

不知道這個方法大家有沒有用過,這種簡潔的方式介紹給大家,兩者方式都很簡短,但不知道效能會不會有差,歡迎大大指點 : )