| 語句 | 適用場景 | 關鍵特性 |
if-else | 布林條件、區間判斷、複雜邏輯組合 | 靈活、支援任意運算式 |
switch | 離散值比對、型別模式、模式比對 (C# 7+) | 可讀性佳、編譯器優化、不可貫穿 |
if-else 語法
// 單分支
if (condition) statement;
// 雙分支
if (condition) statement1; else statement2;
// 多重分支
if (cond1) { }
else if (cond2) { }
else { }
// 巢狀
if (outer) {
if (inner) { } else { }
} else { }
關鍵規則
- 條件必須為 bool 型別 (C# 不支援整數隱含轉換)
- 單行陳述式可省略大括號,但建議保留防維護錯誤
else 配對最近的未配對 if (懸空 else 問題)
switch 語法 (C# 8.0+ 增強)
// 傳統 switch (離散值)
switch (day) {
case 1: case 2: case 3: case 4: case 5: return "Weekday";
case 6: case 7: return "Weekend";
default: throw new ArgumentException();
}
// 型別模式 (C# 7.0)
switch (obj) {
case int i: return i.ToString();
case string s: return s;
case null: return "null";
default: return "?";
}
// Switch 運算式 (C# 8.0) - 運算式主體
var result = day switch {
1 or 2 or 3 or 4 or 5 => "Weekday",
6 or 7 => "Weekend",
_ => throw new ArgumentException()
};
// 屬性模式 (C# 8.0)
var desc = person switch {
{ Age: >= 18, IsStudent: true } => "Adult Student",
{ Age: >= 18 } => "Adult",
{ Age: < 18 } => "Minor",
_ => "Unknown"
};
switch 核心規則
- 不可貫穿:每個
case 必須以 break/return/throw/goto case 結束
case 標籤支援:常數、null、型別模式、關係模式、屬性模式
default 最多一個,位置任意 (建議最後)
- 控制型別:
sbyte, byte, short, ushort, int, uint, long, ulong, char, string, enum 及其可為 null 版本
goto case 明確貫穿 (罕用)
switch (month) {
case 1: total -= 31; goto case 2;
case 2: total -= 28; goto case 3;
case 3: total -= 31; goto case 4;
// ...
case 12: total -= 31; goto default;
default: total += day; break;
}
字串作為 case 標籤
string cmd = Console.ReadLine();
switch (cmd) {
case "start": Start(); break;
case "stop": Stop(); break;
case "restart": Restart(); break;
default: Console.WriteLine("Unknown command"); break;
}
總結
if-else 處理複雜布林邏輯,switch 處理離散值/型別/模式比對。現代 C# switch 運算式與模式比對大幅提升表達力。核心鐵律:條件為 bool、switch 不可隱式貫穿、善用模式比對簡化程式碼。
- 上一篇文章: C# while 迴圈:前測試迴圈語法、break/continue 控制與實戰範例
- 下一篇文章: C# switch 語句深度解析:不可貫穿規則、模式比對、字串標籤與 goto case
Copyright ©
程式碼之家 All Rights Reserved