首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# switch 陳述式完整教學:語法、規則與最佳實務

     編輯:關於C語言

前言

當多個 if-else 針對同一運算式比較不同常數值時,switch 陳述式提供更清晰、效能更佳的替代方案。本文涵蓋語法、規則、貫穿限制、模式比對(C# 7+)等完整內容。

基本語法

switch (controllingExpression)
{
    case constantExpression1:
        statements;
        break;
    case constantExpression2:
        statements;
        break;
    ...
    default:
        statements;
        break;
}

核心規則

  1. 控制運算式:僅支援 bool、char、string、enum、整數型別(int、long 等)及可隱含轉換至上述型別的類型。
  2. Case 標籤必須為常數:不可為變數或運算式(如 case x > 0: ❌)。
  3. Case 值唯一:不允許重複常數值。
  4. 不允許隱式貫穿:C# 強制每個 case 以 break、return、throw 或 goto case 結束,避免 C/C++ 常見的漏寫 break Bug。
  5. 可用 goto case 明確貫穿:
switch (value)
{
    case 1:
    case 2: // 允許:無語句直接堆疊標籤
        DoSomething();
        break;
    case 3:
        DoSomething();
        goto case 4; // 明確跳轉
    case 4:
        DoOther();
        break;
}

實務範例:XML 特殊字元轉義

public string EscapeXml(string input)
{
    var sb = new StringBuilder();
    foreach (char c in input)
    {
        switch (c)
        {
            case '<': sb.Append("<"); break;
            case '>': sb.Append(">"); break;
            case '&': sb.Append("&"); break;
            case '"': sb.Append("""); break;
            case '\'': sb.Append("'"); break;
            default: sb.Append(c); break;
        }
    }
    return sb.ToString();
}

進階:模式比對(C# 7.0+)

現代 C# 擴充 switch 支援型別模式、屬性模式、Tuple 模式等:

public string Describe(object obj) => obj switch
{
    int i when i > 0 => $"Positive integer: {i}",
    int i when i < 0 => $"Negative integer: {i}",
    string s when s.Length > 10 => $"Long string: {s}",
    string s => $"String: {s}",
    Person p => $"Person: {p.Name}, Age: {p.Age}",
    null => "Null",
    _ => "Unknown"
};

Switch 運算式(C# 8.0+)

更簡潔的運算式語法,直接回傳值:

public decimal CalculateDiscount(Customer c) => c switch
{
    { IsVip: true, Years: > 5 } => 0.25m,
    { IsVip: true } => 0.15m,
    { Years: > 10 } => 0.10m,
    _ => 0m
};

效能考量

  • 編譯器會將 switch 優化為跳躍表或二元搜尋,對大量 case 效能優於 if-else 鏈。
  • 字串 switch 內部使用雜湊表查找,效能良好。

結語

switch 從傳統陳述式演進為強大的模式比對工具。掌握基本規則(常數 case、無隱式貫穿)並善用新語法(switch expression、property pattern),能寫出更易讀、可維護且高效的分支邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved