2011-04-13 118 views
1

我看到了很多類似的代碼:重新拋出異常

try 
{ 
    // Some code 
} 
catch (Exception e) 
{ 
    throw; 
} 

爲什麼會有人需要趕上並重新拋出沒有別的catch塊中的異常?

+3

可能的重複[爲什麼在C#中捕獲和重新拋出異常?](http://stackoverflow.com/questions/881473/why-catch-and-rethrow-exception-in-c) – 2011-04-13 16:34:41

+0

此問題已被問及在SO上多次回答。你可以通過[快速搜索]找到一組不錯的搜索結果(http://www.google.com/search?q=rethrow+exception+site%3Astackoverflow.com) – 2011-04-13 16:35:56

+0

@Metro:這可能是個騙局,但不是真的接近你所鏈接的那個。 – 2011-04-13 17:09:40

回答

3

沒有理由,除非你想拋出一個不同類型的異常或在重新拋出之前執行一些操作。

0

這可能是因爲人想要明確表示這部分代碼可能會拋出一個異常(作爲一種文檔),並且在將來可能希望以不同的方式處理異常,因此他們會現在建立結構。

嚴格地說,它本質上什麼都不做。

0

通常情況下,您會在開發過程中看到類似這樣的結構,其中開發人員使用try-catch但尚未實現catch

0

C#提供了一個非常簡單的語法 來一直提供所需的重新拋出 語義,但似乎不是很 人知道這件事。這留下了 我感到困惑,因爲它本質上是C++使用的相同語法的 :空的 throw語句。

http://winterdom.com/2002/09/rethrowingexceptionsinc

1

,這種代碼將被要求避免異常過濾器的奇效。詳情請參閱http://www.pluralsight-training.net/community/blogs/keith/archive/2005/03/31/7149.aspx(Brian在Why catch and rethrow an exception in C#?線程中發現的鏈接)。

短版本 - 在異常拋出和catch塊之間可能會有別人運行elses代碼。因此,代碼可能能夠訪問某些不可見的信息(即像文章的示例中允許在模擬的上下文中運行第三方代碼那樣)。

這對公共圖書館和允許第三方插件的代碼很重要,通常不是應用程序開發人員關心的問題。

0

我的猜測是,它只是爲了調試目的 - 開發人員可以在throw語句中設置斷點,然後檢查e中的內容。