2010-11-03 97 views
25

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

C#中有什么东西吗?如果不是,我怎么知道要捕捉什么异常,或者我怎么让别人知道要捕捉什么异常?另外,如果我定义了一个接口,有没有办法说“methodX()应该抛出这个异常的错误”?

+0

我想.NET框架的版本会在这里有所作为,但是在我使用的版本中,答案是:你很好地记录了潜在的异常,并且没有 - 没有办法强制抛出异常类型(缺少将所有异常捕获到外部,并将它们重新包装到您的首选类型中)。这不仅仅是你可能在方法中产生的例外,还有你让泡泡。 – Rudu 2010-11-03 14:37:04

回答

32

没有什么相当于在C#:The Trouble with Checked Exceptions

除了文档,是没有办法来声明一个接口说“methodX()应该抛出此异常的错误”。

+1

有趣但错误的文章。 – JeremyP 2010-11-03 16:11:51

+0

非常有趣读取 – 2010-11-03 16:20:20

+1

@JeremyP它怎么错了? – dbkk 2010-11-03 16:37:53

3

C#不支持这一点。 (不是我知道的)。 你可以做的是使用Xml注释,以便在调用你的方法时,这些数据将通过intellisense显示。

2

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

+0

大声笑的时候我写这2个人已经发布了! – DeliveryNinja 2010-11-03 14:37:54

8

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

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

10

C#/。NET没有检查异常,它们被证明是比最初设想的大型系统用处不大。在很多项目中,维护检查异常规格的时间比通过使用它们节省的调试时间要大得多。

检查异常似乎是一个很好的理想,直到你有方法可以将委托或调用传入到你传入的对象中。以一个简单的例子,列表中的Sort()方法无法知道它将抛出什么异常,因为它不知道被排序的对象上的Compar()方法会抛出什么异常。

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

但是,有些工具可以检查是否捕获所有的异常 - 参见Red Gate的Exception Hunter。我个人认为这些工具看不到太多价值,但是如果你喜欢检查异常,你可能会发现它们很有用。