8

我知道Java強制程序員列出將由方法拋出的所有異常,從而創建一個列出代碼用戶可能拋出的所有異常的簡單方法。列出可能由方法拋出的所有異常

.NET另一方面沒有這樣的功能,我們只剩下的是API文檔或XML文檔,其中例外是有時會列出

是否有VS的任何插件顯示哪些異常的任何給定的調用可能拋出?鑑於反思的力量,不應該有可能通過調用來查看所有可能的運行分支,並檢查是否有任何.NET異常被拋出?

+0

而且,如果您發現它通過源代碼分析引發3個不同的異常,您將如何將catch子句放在每個代碼的代碼中? – shahkalpesh 2010-04-06 12:56:01

+1

即使大多數Java工程師現在都不承認檢查異常是一個可怕的想法嗎? – 2010-04-06 13:06:27

+2

我想你必須解決暫停問題來確定每個可能引發DivideByZeroException的實例(與類不變實例阻止它發生的那些實例相反) – 2010-04-06 14:09:58

回答

8

我知道的唯一工具是(商業)Exception Hunter from red-gate software

但是,它並不像您首先想到的那樣確定。根據所使用的其他程序集的版本,如果使用在構建時拋出其他異常而不是預期的新版本,則構建時間後引發的異常可能會有所不同。

在Java中,您有「特殊的」RuntimeException,不必在方法簽名中聲明它(包括從它降序的所有異常)。語言設計者選擇不在C#中實現檢查的異常是否有正當的理由(它們是否超過了優點是否值得商榷)。一些Java開發人員只是在運行時異常中包裝異常,或者忘記使用導致信息丟失的「原因」異常。

有一個很好的interview with Anders Hejlsberg關於檢查異常和一些爲什麼C#沒有他們的推理 - 感謝adrianbanks的鏈接。

+2

有關Anders Hejlsberg關於檢查異常的一個很好的採訪,以及爲什麼C#在這裏沒有它們的一些推理:http://www.artima.com/intv/handcuffs.html – adrianbanks 2010-04-06 13:01:48

+0

@adrianbank,我知道,但我只是沒有鏈接。感謝您發佈它! – Lucero 2010-04-06 13:06:58

+0

偉大的文章,提供了一個很好的觀點,對於我們這些誰在實際使用中從來沒有真正看起來他們檢查的豁免。 – 2010-04-07 22:10:00