| 類別 | 關鍵字 | 用途 |
| 選擇 | if, else, switch, case | 條件分支 |
| 迴圈 | while, do, for, foreach | 重複執行 |
| 跳轉 | break, continue, goto, return, throw | 改變執行順序 |
| 條件編譯 | #if, #elif, #else, #endif, #define, #undef | 編譯期包含/排除程式碼 |
| 例外處理 | try, catch, finally, throw | 錯誤處理與資源清理 |
選擇結構
if-else
if (score >= 90) grade = 'A';
else if (score >= 80) grade = 'B';
else grade = 'C';
// 單行陳述式可省略大括號,但建議保留以防維護錯誤
if (flag) DoSomething();
條件必須為 bool 型別 (C# 不支援整數隱含轉換)。
switch (模式比對增強)
// 傳統 switch (C# 7.0 前)
switch (day) {
case 1: case 2: case 3: case 4: case 5: return "平日";
case 6: case 7: return "假日";
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 "unknown";
}
// C# 8.0+ Switch 運算式 (運算式主體)
var result = day switch {
1 or 2 or 3 or 4 or 5 => "平日",
6 or 7 => "假日",
_ => throw new ArgumentException()
};
關鍵規則:不允許貫穿,每個 case 必須以 break/return/throw/goto case 結束。
迴圈結構
for
for (int i = 0; i < 10; i++) { ... }
// 多變數初始化/迭代
for (int i = 0, j = 10; i < j; i++, j--) { ... }
// 無限迴圈
for (;;) { if (done) break; }
foreach
foreach (var item in collection) { ... }
// 僅讀取,不可修改迴圈變數
// 適用於實作 IEnumerable/IEnumerable 的型別
while / do-while
while (condition) { ... } // 先判斷
do { ... } while (condition); // 至少執行一次
跳轉陳述式
| 關鍵字 | 效果 | 常見用途 |
break | 離開最近的迴圈/switch | 提前結束搜尋 |
continue | 跳過本次迴圈剩餘,進入下一次 | 略過無效項目 |
goto label | 跳轉到標記 | switch case 間跳轉、狀態機 |
return | 離開方法,可帶回傳值 | 正常/提前返回 |
throw | 拋出例外,啟動例外處理機制 | 錯誤通報 |
條件編譯
#define DEBUG
#undef TRACE
#if DEBUG && !RELEASE
Console.WriteLine("Debug mode");
#elif RELEASE
Console.WriteLine("Release mode");
#else
Console.WriteLine("Other");
#endif
#warning 這是編譯警告
#error 這是編譯錯誤,會中止建置
符號定義必須在「實際程式碼」之前;#if 區塊可巢狀。
例外處理架構
try
{
// 可能拋出例外的程式碼
riskyOperation();
}
catch (FileNotFoundException ex) when (ex.FileName.EndsWith(".tmp")) // C# 6 例外篩選
{
// 處理特定例外
}
catch (IOException ex)
{
// 處理基類例外 (順序:具體 → 一般)
}
catch (Exception ex)
{
// 兜底處理
}
finally
{
// 無論是否發生例外、是否 return/break/throw,必定執行
// 適用於資源釋放、鎖釋放、記錄
}
最佳實踐速查
switch 優於長 if-else 鏈 (可讀性、效能)
foreach 優於 for 遍歷集合 (語意清晰、避免索引錯誤)
- 迴圈變數在
foreach 中為 唯讀,不可修改
finally 區塊 永遠執行 (含 goto、return、例外傳播)
- 捕捉例外順序:衍生類別在前,基類在後
- 條件編譯用於除錯追蹤、平台差異、功能開關,勿濫用
- 上一篇文章: 物件導向技術起源:從軟體危機到 OOP 範式轉移
- 下一篇文章: C# 例外處理機制深度解析:與 C++ 差異、例外傳播與 finally 語意
Copyright ©
程式碼之家 All Rights Reserved