許多 struct 與類別的成員(欄位是主要的例外)都可以使用運算式主體成員語法。用運算式來定義成員,通常比傳統的區塊或敘述產生更精簡、更好讀的程式碼。
方法與唯讀屬性都是可以用運算式主體來定義的成員。
public int Times3(int input) => input * 3;
public int Interesting => 1729;
switch 運算式可以將某個值比對到一組模式中的某個案例,並回傳對應的值,或執行對應的動作。這個對應關係以=>符號表示。此外,每個模式都可以有選用的案例防護,以when關鍵字開頭。該案例防護的運算式必須評估為 true,這個 switch 的「分支」才會被選中。這些案例(也稱為 switch 分支)會依文字順序評估,一旦找到相符的案例,流程就會立刻中斷,並回傳對應的值。
double xx = 42d;
string interesting = xx switch
{
0 => "I suppose zero is interesting",
3.14 when DateTime.Now.Day == 14 && DateTime.Now.Month == 3 => "Mmm pie!",
3.14 => "π",
42 => "a bit of a cliché",
1729 => "only if you are a pure mathematician",
_ => "not interesting"
};
// => interesting == "a bit of a cliché"
三元運算子讓條件可以寫在運算式裡,而不是敘述區塊中。這呼應了函式式程式設計的做法,通常能讓程式碼更具表達力,也更不容易出錯。
三元運算子結合了 3 個運算式:先是一個條件,接著是條件為真時要評估並回傳的運算式(if 部分,以?開頭),以及條件為假時要評估並回傳的運算式(else 部分,以:開頭)。
int a = 3, b = 4;
int max = a > b ? a : b;
// => 4
throw運算式是throw敘述的替代方案,特別能強化三元運算式與其他複合運算式的威力。
string trimmed = str == null ? throw new ArgumentException() : str.Trim();
有人請你改善一段與氣象站有關的舊程式碼。
氣象站會接收讀數,並輸出一些指標,例如溫度和氣壓。
使用表達式主體成員重構 WeatherStation 類別中適合的方法。在適當的地方使用三元運算和 switch 運算式,以提升表達性,並可能減少錯誤。
確保所有測試仍能通過。