本頁重點提要

  • 01.catch 具體例外優先;Exception 放最後。
  • 02.不要吞例外;需要重拋用 throw; 保留 stack trace。
  • 03.using/finally 保證資源釋放,避免隱性問題。

寫法最佳實務:catch 精準、保留 stack trace

工程規範 03:不要 catch (Exception) 然後什麼都不做

  • 先 catch 具體例外(FormatException / IOException / HttpRequestException)。
  • 如果一定要 catch Exception,請把它放在最後,並且要 log / 轉成可控回應。
// ✅ 正確:保留 stack trace
try
{
    DoWork();
}
catch
{
    // 做必要處理後重新拋出
    throw; // ✅ 保留原始 stack trace
}

// ❌ 錯誤:會重置 stack trace
catch (Exception ex)
{
    throw ex; // ❌ 不要這樣寫
}

finally / using:資源必須被釋放

// using 會自動 Dispose
using var stream = File.OpenRead(path);
// ...

工程規範 04:例外訊息不要直接顯示給使用者

例外訊息常包含路徑、連線資訊、甚至內部實作細節。對使用者只回「可理解的建議」,診斷細節交給 log。

Implementation Reference
try { DoWork(); } catch { throw; }
// 不要 throw ex
Switch Page