C#明确定义了抛出的异常

时间:2010-11-03 14:33:39

标签: c# exception interface

在Java中,您使用“throws”关键字明确定义了抛出的异常。这样,任何调用你的方法的人都知道要抓到什么。

C#中有什么东西吗?如果没有,我如何知道要捕获的异常,或者如何让其他人知道要捕获的异常?

另外,如果我正在定义一个接口,有没有办法说“methodX()应该在出错时抛出此异常”?

6 个答案:

答案 0 :(得分:34)

C#中没有任何等价物:The Trouble with Checked Exceptions

除了文档之外,没有办法声明一个接口说“methodX()应该在出错时抛出此异常”。

答案 1 :(得分:11)

C#/。net没有检查异常,事实证明它们在大规模系统中的用处不如首先想象的那么多。在很多项目中,维护检查异常规范的时间远远大于通过使用它们节省的调试时间。

Checked Exceptions似乎是一个很好的理想,除非你有方法可以将委托或调用带入你传入的对象。举一个简单的例子,列表上的Sort()方法不知道它会抛出什么异常,它不知道正在排序的对象的Compar()方法会抛出什么异常。

因此,方法可能抛出的异常规范必须能够包含有关如何通过对象和委托传递异常的信息。 没人知道怎么做!

但是,有些工具可以检查是否捕获了所有异常 - 请参阅Red Gate的Exception Hunter。我个人认为这些工具没有多大价值,但是如果你喜欢检查过的例外情况,你会觉得它们很有用。

答案 2 :(得分:8)

此功能在C#中不可用。您可以制作正确的XML文档(3个斜杠///)并说明抛出的异常。

这将由IntelliSense机制获取,并且在使用之前将对类/方法的用户可见。

答案 3 :(得分:3)

C#不支持此功能。 (不管怎样我都不知道)。 您可以做的是使用Xml注释,以便在调用方法时,这些数据将由intellisense显示。

答案 4 :(得分:2)

据我所知,C#中没有throws声明,你可以记录你的方法,表明它抛出异常但没有强制错误处理。

答案 5 :(得分:2)

C#不支持已检查的异常。语言设计者会以java使用它们的方式考虑检查异常。

Some workarounds