利用C#的switch case when語法來忽略字串大小寫
會出現這個需求是因為有需要用switch指令來進行作業切割,而裡面又需要進行非精準的字串命中解析,以防止有些人為狀況下導致程式碼不能使用,例如下列這個情況:
假設 "Abc", "ABc", "abC" ... 都要命中某個case,所以我們都會先在switch端進行ToUpper()或ToLower()的轉換,但是轉換後case端字串又顯得其醜難以閱讀,例如下面這兩段程式碼,你會覺得哪個比較好閱讀?
case "TheBoySayWannaDrink": //閱讀良好
DoSomething();
case "THEBOYSAYWANNADRINK": //難以閱讀
DoSomething();
C# 7.0之後的case when來解救你啦!
從C# 7.0開始case陳述式不需要互斥,所以可新增when子句來指定其他條件,滿足這些條件case陳述式才會評估為true。when子句可以是任何傳回布林值的運算式。
以剛才舉的ToUpper()例子來說,我們可以用這個寫法來讓程式碼變得更好閱讀。
//終於可以保留高辨識度的字串了
switch (cTemp)
{
case string x when x.Equals("TheBoySayWannaDrink", System.StringComparison.InvariantCultureIgnoreCase):
DoSomething();
break;
case string x when x.Equals("TheGirlSayWannaEat", System.StringComparison.InvariantCultureIgnoreCase):
DoSomething();
break;
}
相關連結
- 在C#的SwitchExpression下使用模式比對(Pattern Matching)
- 利用SwitchExpression來進行switch流程程式碼判斷的優化
- 利用SwitchExpression取代if-else,並閃避逐行判斷的寫法
- 利用C#的switch case when語法來忽略字串大小寫
- C#的IS與AS運算子之撰寫方法
- C#的NULL運算演化:?.、??、??=、以及模式比對增強功能
- 遞迴模式比對
- C# 9.0 中的新增功能