如何找出.NET函数可能抛出的异常?

时间:2008-10-12 02:21:43

标签: .net exception reference

我可能会遗漏一些显而易见的东西但是有一个关于.NET中的函数抛出什么异常以及为什么可能抛出异常的参考?

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

我现在唯一的解决方案就是抓住我所知道的那些然后捕获异常类型,但我宁愿能够确切地知道哪些类型的异常我最有可能遇到为什么。我原本以为MSDN库会有这种类型的信息,但我无法在任何地方找到它。我只是瞎了吗?这个信息在其他地方吗?

编辑:一些更具体的内容,现在我正在寻找可能由XDocument.Load(字符串)函数抛出的异常。看起来online documentation或对象浏览器中没有任何相关内容。我现在必须运行一些测试,看看我跑进去了吗?

3 个答案:

答案 0 :(得分:8)

不错的问题,你有20/20的愿景。 C#/ .NET没有实现throws语句(即,检查异常)。

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

<#> C#之父Anders Hejlsberg解释了this article/interview中从C#中删除已检查异常的理由。这是一个很好的阅读。

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

  

我对检查异常的担忧是它们给程序员带来的手铐。您会看到程序员选择具有所有这些抛出子句的新API,然后您会看到他们的代码有多复杂,并且您意识到已检查的异常并没有帮助他们。这些独裁的API设计师会告诉您如何进行异常处理。他们不应该这样做。

因此,正如Mitch和一氧化物所说,.NET FCL的MSDN文档列出了与每个类相关的异常以及每个命名空间内可能的异常。

答案 1 :(得分:2)

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

另外,它只是实际抛出异常的函数,属性等,所以这些东西不包含在一般文档中,只在实际抛出它们的函数或访问器的文档中,如给出的示例所示。你最好的办法是在VS中使用你感兴趣的类/ es围绕对象浏览器。

答案 2 :(得分:1)

.NET没有像java中的'throws'关键字那样实现,所以最好的办法是查看在线MSDN文档。

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