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

C# switch 陳述式「禁止貫穿」規則詳細說明

     編輯:關於C語言

核心差異:C/C++ 允許貫穿,C# 強制中斷

C/C++ 允許 switch 中 case 標籤後省略 break,導致執行流程「貫穿」至下一個 case。這常因開發者疏忽漏寫 break 而產生難以偵錯的 Bug。C# 為此禁止隱性貫穿,編譯器強制要求每個 case 區塊以跳躍陳述式結束。

C# switch 三大特性

  1. 案例順序不影響邏輯:因禁止貫穿,case 排列順序可任意調整,不改變程式行為。
  2. 明確貫穿語法:若確需貫穿,必須顯式使用跳躍陳述式:
    • goto case label;(跳至指定 case)
    • goto default;(跳至 default)
  3. 其他合法結束方式:除 goto 外,throw、return、break 皆可結束 case 區塊。

字串支援:C# 獨有優勢

C# 同 VB.NET 一樣支援字串常值作為 case 標籤,C/C++ 不支援。範例:


string cmd = Console.ReadLine();
switch (cmd) {
    case "START": StartEngine(); break;
    case "STOP": StopEngine(); break;
    case "PAUSE": PauseEngine(); break;
    default: Console.WriteLine("未知指令"); break;
}

這大幅簡化命令解析、狀態機等常見情境的程式碼。

完整範例:顯式貫穿


switch (status) {
    case Status.Critical:
        LogCritical();
        goto case Status.Warning; // 明確貫穿至 Warning
    case Status.Warning:
        LogWarning();
        NotifyAdmin();
        break; // 必須以 break/return/throw/goto 結束
    case Status.Normal:
        LogInfo();
        break;
    default:
        throw new ArgumentException("無效狀態");
}

總結

C# switch 透過禁止隱性貫穿消除一大類常見錯誤,並新增字串標籤支援,配合 goto case 提供受控的貫穿機制,使控制流程更清晰、安全且具表達力。

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