C# switch 強制禁止隱含貫穿,每個 case 必須以 break、goto case、goto default、return、throw 等明確跳離。這消除 C/C++ 常見的漏寫 break Bug。
// ❌ 錯誤:case 1 結束無跳離
switch (m) { case 1: total -= 31; case 2: total -= 28; ... }
// ✅ 正確:明確 goto case
switch (m) {
case 1: total -= 31; goto case 2;
case 2: total -= 28; goto case 3;
...
case 12: total -= 31; goto default;
default: total += day; break;
}
因無隱含貫穿,case 順序不影響語意,可依業務邏輯/可讀性排序。
string text = GetButtonCaption();
switch (text) {
case "OK": ShowMessage("Save and exit"); break;
case "Retry": ShowMessage("Return and retry"); break;
case "Abort": ShowMessage("Abort and exit"); break;
case "Help": ShowMessage("Get help"); break;
}
C# 允許 string、enum、整數型別作為控制型別;case 標籤允許 null。
switch (i) {
case 0: while (true) F(); // 無窮迴圈不返回
case 1: throw new ArgumentException(); // 拋出例外
case 2: return; // 直接返回
}