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();
不知道這個方法大家有沒有用過,這種簡潔的方式介紹給大家,兩者方式都很簡短,但不知道效能會不會有差,歡迎大大指點 : )