C# Operator 特殊的運算子 ?: 、??和?.

William Liu
3 min readMar 15, 2020

--

C# 提供許多內建的計算方式與布林判斷式,這篇會分享一些較特別的運算子實例呈現。

?: operator

var value = expression1 : expression2;example:
int test = 10;
int a = test > 0 ? 5 : -1;
//a = 5

運算原理會是先判斷 test > 0 這件事成不成立,如果成立回傳5,不成立的話回傳-1。

int a = test > 0 ?  5 : -1;
這個運算式其實就等於做了以下這些事
//if (test > 0)
//{
// a = 5;
//}
//else
//{
// a = -1;
//}

?? operator

value ?? expressionexample:
int? NullableValue = null;
int b = NullableValue ?? -1;
//b = -1

運算原理會是先判斷 NullableValue 的值是不是null,如果是回傳-1,不成立的話回傳NullableValue 的值。

int b = NullableValue ?? -1;
這個運算式其實就等於做了以下這些事
//if (NullableValue is null)
//{
// b = -1;
//}
//else
//{
// b = NullableValue.Value;
//}

?. operator

value ?. expressionexample:
int[] NullableArrayValue = null;
int? c = NullableArrayValue?.Length;
//c = null

運算原理會是先判斷 NullableArrayValue 的值是不是null,如果是回傳null不繼續往下跑鏈結函式,不成立的話回傳NullableArrayValue往下一層做的鏈結函式,當然越多層也可以一直往下串?.運算子。

int? c = NullableArrayValue?.Length;
這個運算式其實就等於做了以下這些事
//if (NullableArrayValue is null)
//{
// c = null;
//}
//else
//{
// c = NullableArrayValue.Length;
//}

Conclusion: 練習一些特殊的運算子,在開發上使用的好處是省去多餘的程式撰寫,省下多餘程式碼還可以讓程式閱讀性更好,Why not?

參考文章

C#運算子

Thanks for your reading.

--

--