我想寫一個處理異常的方法,這將被稱爲catch
塊內的方法。根據通過的異常類型,異常無論是作爲一個新的異常的內部異常傳遞或者乾脆重新拋出。如何在第二種情況下保留堆棧跟蹤?C#重新拋出異常的設計來處理異常和保存堆棧跟蹤
例子:
public void TestMethod()
{
try
{
// can throw an exception specific to the project or a .Net exception
SomeWorkMethod()
}
catch(Exception ex)
{
HandleException(ex);
}
}
private void HandleException(Exception ex)
{
if(ex is SpecificException)
throw ex; //will not preserve stack trace...
else
throw new SpecificException(ex);
}
我不希望做的是,因爲該模式是重複的很多地方,不會有分解:
try
{
SomeWorkMethod();
}
catch(Exception ex)
{
if(ex is SpecificException)
throw;
else
throw new SpecificException(ex);
}
你爲什麼不使用類似 「如果拋出(HandleException(前)!);」。我知道這是不是正是你想要的,但它很簡單,而不是什麼大不了的事,如第二個例子。 – Julo
你爲什麼不具備的'SpecificException'一個單獨的收穫? catch(SpecificException e){throw;}' – juharr