2010年5月14日 星期五

回擲例外 Rethrow caught exceptions

當處理例外時,如需回擲同一例外時,應該處理正確。

錯誤範例:

catch( Exception ex )
{
ExceptionPolicy.Handle( ex, “Crital” );
throw ex;   //不正確。這樣會遺失掉例外的StackTrace
}

使用 throw ex 時,會使用新的 call stack,故例外被上一層補獲時,記錄的 StackTrace 不是原本的例外的StackTrace。

正確範例:

catch( Exception ex )
{
ExceptionPolicy.Handle( ex, “Crital” );
throw;   //正確。
}

使用 throw 時,會使用原有例外的的 call stack,故例外被上一層補獲時,記錄的 StackTrace就是我們想要的。

沒有留言:

Share with Facebook