異常處理是 C# 程式健壯性的基石。本文透過多個實戰代碼片段,系統講解 try-catch-finally 機制、多重捕獲順序、自定義異常、以及資源釋放模式。
try
{
// 可能拋出異常的代碼
int n = 10, m = 0;
float f = n / m; // 會拋出 DivideByZeroException
}
catch (DivideByZeroException ex)
{
// 捕獲特定異常
Console.WriteLine(ex.Message);
}
catch (Exception ex)
{
// 捕獲所有其他異常(需放在最後)
Console.WriteLine(ex.Message);
}
finally
{
// 無論是否發生異常,必定執行(資源釋放、日誌記錄等)
Console.WriteLine("finally");
}
Exception 之前,否則編譯錯誤或永遠捕獲不到。catch { } 等同於 catch (Exception) { },但無法獲取異常對象。try 或 catch 中有 return,finally 仍會執行(除非進程終止)。throw new ArgumentNullException(); 實現防禦性編程。StreamWriter sw = new StreamWriter("exceptions.txt");
try
{
for (byte b = 0; b < 10; b++)
{
sw.WriteLine($"Byte {b+1}:{b}");
// 故意越界觸發異常
byte[] arr = new byte[3];
arr[b] = b;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
sw.WriteLine("Close");
sw.Close(); // 確保資源釋放
}
public class TooManyItemsException : Exception
{
public TooManyItemsException() : base("自定義異常:項目過多") { }
}
配合 throw new TooManyItemsException(); 使用,可精準表達業務錯誤語義。
掌握異常處理的層級捕獲、資源確定性釋放、自定義異常設計,是編寫高質量 C# 代碼的必備技能。建議在關鍵資源操作(IO、數據庫、網絡)中嚴格遵循 try-finally 或 using 模式。