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