利用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;
}

相關連結

  1. 在C#的SwitchExpression下使用模式比對(Pattern Matching)
  2. 利用SwitchExpression來進行switch流程程式碼判斷的優化
  3. 利用SwitchExpression取代if-else,並閃避逐行判斷的寫法
  4. 利用C#的switch case when語法來忽略字串大小寫
  5. C#的IS與AS運算子之撰寫方法
  6. C#的NULL運算演化:?.、??、??=、以及模式比對增強功能
  7. 遞迴模式比對
  8. C# 9.0 中的新增功能
C#7.0 switch case when ToUpper() ToLower()