2012-04-24 65 views
3

有沒有什麼辦法可以自動生成「catch」,以便在vs 2010或第三方應用程序中使用方法拋出的所有可能的異常?在visual studio 2010中自動生成捕獲

例如,如果我用「Directory.CreateDirectory」會自動創建:

try 
{ 
Directory.CreateDirectory("blabla"); 
} 
catch (PathTooLongException) 
{} 
catch (DirectoryNotFoundException) 
{} 
catch (IOException) 
{} 
catch (ArgumentNullException) 
{} 
catch (UnauthorizedAccessException) 
{} 
+0

相關:[?爲什麼不例外中選中.NET(HTTP://計算器。com/questions/124143/why-are-exceptions-not-in-net) – Heinzi 2012-04-24 05:00:15

回答

1

有哪些發現未處理的異常代碼中的工具:。Exception Hunter by Red Gate software

事實證明,他們停止它:

隨着.NET 4.0和WPF的發佈,CLR可以拋出的異常數量大大增加,直到壓倒性。排除列表不能再覆蓋CLR可能拋出的所有不可能的例外。這意味着,雖然異常獵手會提供準確的結果,但這些結果將包含一長串潛在的例外情況,其中大多數情況都無需擔心。

這應該表明「捕獲一個方法可能拋出的所有異常」可能是一個壞主意。通常的模式是隻在您的用戶界面(的WinForms)的頂部水平有一個全球性的包羅萬象的

try { 
    ... 
} catch (Exception ex) { 
    logAndShowErrorMessage(ex); 
} 

,或者處理的專用方法(WPF:Application.DispatcherUnhandledException,Web窗體:Application.Error)錯誤。

你直接在代碼只有在你期望這個例外發生的特殊情況處理異常和你知道如何處理這個具體怎麼繼續你的程序執行之後。


作爲一個方面說明:你想要什麼看起來非常相似,所謂的Java功能「checked異常」:它迫使你要麼處理異常或聲明你的方法將重新把它扔。下面的問題解釋了爲什麼C#的設計者特意選擇了包括此功能:

0

默默忽略例外是非常不好的做法,因此,當然,也沒有辦法自動生成抓住一個空的身體。此外,還不清楚該方法可能拋出哪些異常,因爲在C#中,不會聲明函數拋出哪些異常(而不是Java)。

如果您仍然希望忽略所有例外,您只需編寫catch(Exception),它將捕獲所有例外,因爲所有例外都是從基類Exception類繼承的。但是你確定默默無視可能發生的一切是一個好主意嗎?最好讓用戶(或調用者)知道出現了問題,而不是默默地不做預期的工作(想象一下,例如,如果Directory.CreateDirectory會以這種方式行事,以至於你永遠不知道它是否成功地創建了目錄或者沒有,如果沒有,是什麼原因

+1

OP沒有說他們想要忽略所有的異常,只是爲了爲每個異常生成一個catch塊,而沒有他們全部的清單。然後他們可以將任何東西放入catch塊。 – ProfK 2013-12-20 12:36:14

相關問題