釐清 catch(Exception e) { throw e; } 非錯誤用法(可重設堆疊追蹤定位點),但需避免 catch {} 吞沒嚴重異常(StackOverflowException、OutOfMemoryException)。
對比 IL 代碼:
Test1 (含 try-catch):多 8 位元組儲存 catch 區塊資訊。Test2 (無 try-catch):正常流程指令相同。實測 100 萬次呼叫 × 10 輪,差異 < 0.0001%。結論:無異常時 try-catch 幾乎零成本。
拋出/處理異常消耗大量資源與時間。異常僅用於真正異常情況,不可用於流程控制。
錯誤範例:Int32.Parse 配合 try-catch 處理使用者輸入 → 應用 Int32.TryParse(.NET 2.0+)。
finally 區塊始終執行(含 return、throw 情況)。
思考題:
int a = 2;
try { int i = Int32.Parse("s"); }
catch { a = 1; return; }
finally { a = 3; }
// 執行後 a = 3