// 單分支
if (condition) statement;
// 雙分支
if (condition) statement1; else statement2;
// 多重分支
if (cond1) { }
else if (cond2) { }
else if (cond3) { }
else { }
// 正確
if (args.Length == 0) { }
if (flag) { }
// 錯誤:C# 不支援整數/參考隱含轉換為 bool
if (args.Length) { } // CS0029
if (obj) { } // CS0029
if (ptr != null) { } // 正確:明確比較
if (x > 0)
if (y > 0) Console.WriteLine("Q1");
else Console.WriteLine("Q4"); // 此 else 配對內層 if
else
Console.WriteLine("Left"); // 此 else 配對外層 if
// 等價明確版本
if (x > 0) {
if (y > 0) Console.WriteLine("Q1");
else Console.WriteLine("Q4");
} else {
Console.WriteLine("Left");
}
規則:else 總是配對最近的未配對 if。用大括號消除歧義。
// f(x) = 1 (x > 0)
// = 0 (x == 0)
// = -1 (x < 0)
int Sign(double x)
{
if (x > 0) return 1;
else if (x == 0) return 0;
else return -1;
}
// 簡潔版 (C# 7.0+ 模式比對)
int Sign(double x) => x switch {
> 0 => 1,
0 => 0,
_ => -1
};
| 錯誤代碼 | 程式碼 | 原因 | 修正 |
|---|---|---|---|
| CS0029 | if (count) {} | int 不能隱含轉換 bool | if (count > 0) {} |
| CS0127 | if (true) return; 後有碼 | 偵測到不可到達程式碼 | 移除或調整邏輯 |
| CS0162 | if (false) {} | 偵測到不可到達程式碼 (警告) | 檢查條件或移除 |
| 邏輯錯誤 | if (a = b) {} | 指派而非比較 (C# 編譯錯誤,因 a=b 為 int) | if (a == b) {} |