try
{
int x = 123 / 0; // 拋出 DivideByZeroException
}
catch (DivideByZeroException ex)
{
// 處理特定異常
}
catch (Exception ex)
{
// 處理其他異常
}
finally
{
// 清理資源、還原設定,無論是否發生異常皆執行
}
子類別異常放前面,基類別 Exception 放最後,避免遮蔽。
catch { } 空白捕獲,等同放行異常,不如不寫。finally 釋放非受控資源(連線、檔案控制代碼等)。繼承 ApplicationException 或 Exception,加入業務相關屬性(錯誤代碼、重試建議等),拋出時攜帶內部異常 new MyException("msg", innerEx),保留完整呼叫堆疊。
本文以資料庫操作為例,示範捕獲 SqlException 後記錄日誌並顯示友善訊息,未進一步重試或補償,實務中可視業務需求擴展。