gpt4 book ai didi

c# - 如果 MSDN 中没有记录,如何确定某个方法可以抛出哪些异常?

转载 作者:太空狗 更新时间:2023-10-29 18:18:23 26 4
gpt4 key购买 nike

最近我得到了一个我没有预料到的异常,因为 MSDN 中没有记录它可以由特定的构造函数抛出。所以这是抛出异常的 C# 行:

    using (StreamReader sr = new StreamReader(filePath))

这里的文件路径是应该包含某个文件的完整路径的字符串。问题是我的“filePath”变量实际上是文件夹的路径而不是文件的路径。因此,构造函数 StreamReader(filePath) 抛出:

System.UnauthorizedAccessException: Access to the path 'D:\testFolder' is denied.

好吧,这显然是一个错误,我已经通过传递正确的路径修复了它...但是查看 MSDN 文档中的 StreamReader(string)我没有看到任何关于此异常的提及。在异常部分下有:

  • ArgumentException - 路径是空字符串 ("")。
  • ArgumentNullException - 路径为空。
  • FileNotFoundException - 找不到文件。
  • DirectoryNotFoundException - 指定的路径无效,例如位于未映射的驱动器上。
  • IOException - 路径包含文件名、目录的不正确或无效语法名称或卷标。

进一步思考这个问题,我想抛出的异常实际上应该是 IOException 而不是 UnauthorizedAccessException。这是 .NET Framework 中的错误吗?问题是我有 IOException 处理程序通知用户无效的文件路径并继续应用程序工作流而不会崩溃。此 UnauthorizedAccessException 导致我的应用程序崩溃,因为它未得到处理。

我该如何处理这类问题?我想我过去遇到过类似的未记录异常问题,但这确实促使我研究这个问题并在这里提出问题。

最佳答案

不幸的是,确实没有办法以一般方式处理这个问题。 C# 和 CLR 的性质使得即使不是完全不可能,也很难确定可以从方法中抛出的完整异常集。有一些简单的 API 是可能的,但一般来说不是。

我处理这个问题的方法是简单地捕获Exception。默认情况下,最新版本的 CLR 无法捕获危险异常。因此,您只会捕获更安全 的异常。除非您想对非常具体的错误使用react,否则只需捕获所有错误并对 API 调用失败采取适当的操作

关于c# - 如果 MSDN 中没有记录,如何确定某个方法可以抛出哪些异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21170954/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com