10

我可能遗漏了一些明显的东西,但是在某处是否有关于 .NET 中的函数抛出哪些异常以及为什么会抛出异常的参考?

例如,我最近在 Visual C# 2008 中试用 Linq,我正在将 XML 文件加载到 XDocument 中。只有通过测试我才意识到如果你尝试加载一个不存在的文件,它会抛出一个 FileNotFound 异常,但是如果你尝试加载一个目录而不是一个文件,你会得到一个 UnauthorizedAccessException。还通过 System.IO 命名空间,我可以看到 FileLoad 异常和 PathTooLongException 之类的东西,我可以猜到它们何时可能被抛出,但在某些我还没有想到的情况下可能会抛出其他东西.

我现在唯一的解决方案就是捕获我知道的那些,然后捕获异常类型,但我宁愿能够确切地知道我最有可能遇到的异常类型以及原因。我原以为 MSDN 库会有这类信息,但我在任何地方都找不到。我只是瞎了吗?这个信息在其他地方吗?

编辑:更多细节,现在我正在寻找 XDocument.Load(string) 函数可能引发的异常。看起来在线文档或对象浏览器中没有任何相关内容。我现在是否只需要运行一些测试,看看我遇到了什么?

4

3 回答 3

8

好问题,你有 20/20 的视力。C#/.NET 没有实现 throws 语句(即检查异常)。

任何来自 Java 等语言的人都可能对此感到疑惑。

C# 之父 Anders Hejlsberg 在这篇文章/采访中解释了将检查异常从 C# 中排除的基本原理。这是一个很好的阅读。

从那篇文章中,安德斯说:

我对检查异常的担忧是他们给程序员戴上的手铐。您会看到程序员选择了包含所有这些 throws 子句的新 API,然后您会看到他们的代码变得多么复杂,并且您意识到检查的异常对他们没有任何帮助。正是这些独裁的 API 设计者告诉你如何进行异常处理。他们不应该那样做。

So, as Mitch and monoxide have said, MSDN documentation for the .NET FCL lists exceptions relevant to each class and also exceptions possible within each namespace.

于 2008-10-12T02:33:38.283 回答
2

如果函数抛出异常,通常会在离线帮助页面的底部或对象浏览器中列出。它也列在有关如何调用在线 MSDN 库中的函数的信息下方,例如 string.Contains(),它被标记为“异常”。

此外,实际抛出异常的只有函数、属性等,因此这些内容并未包含在一般文档中,仅包含在实际抛出异常的函数或访问器的文档中,如给出的示例中所示。您最好的选择是在 VS 中使用您感兴趣的类/es 浏览对象浏览器。

于 2008-10-12T02:29:26.200 回答
1

.NET 没有在 java 中实现类似“throws”关键字的任何东西,所以最好的办法是查看在线 MSDN 文档。

编辑:如果您查看命名空间文档(例如System.IO ),它会列出可能引发的异常。

于 2008-10-12T02:25:45.553 回答