【问题标题】:how to know possible exceptions when using try catch?使用 try catch 时如何知道可能的异常?
【发布时间】:2014-09-07 13:51:47
【问题描述】:

根据MSDN,捕获没有特定类型的异常并使用例如System.Net.Exception是一种不好的做法

每次我要捕获错误时,我是否必须深入研究 msdn 手册以查看可能的异常类型。或者 IDE 中有什么方法可以让我快速看到这一点。

目前我使用的是 Visual Studio 2013 Express Edition

 try
 {
    using (WebClient goog = new WebClient()) 
    {
       goog.DownloadString("http://google.com");
    } 
 }
 catch(Exception E)
 {
    saveLog("methodname", E.Message);
 }

编辑:this link 中,看起来VS 已经有一个显示异常的选项,但是,当我选择一个方法时,它只显示方法的类型和参数。但它没有显示异常

【问题讨论】:

  • 如果你将鼠标悬停在一个方法上,智能感知会告诉你可能的异常
  • 可能是我比较懒,或者对VS不太熟悉,但我通常只是等待表达式被抛出,然后从错误中复制它并放入我的try catch中。跨度>
  • 如何启用智能感知?当我悬停一个方法时,我只能看到方法类型、名称和它可以拥有的参数。
  • intellisense 只有在方法声明之前存在相关的xml标签时才会显示可能的异常,显然BCL的每个方法都没有这个标签
  • @Jonesy 它只会告诉您方法是否具有 xml cmets 并且已填充异常标记。没有什么能强迫开发者使用这些,所以它们经常丢失。

标签: c# visual-studio visual-studio-2012 visual-studio-2013


【解决方案1】:

一般来说,最佳做法是只为您希望在程序运行时发生的异常添加处理。

如果您正在处理文件,例如,处理 ***NotFoundException 类型是有意义的。正确的编码将确保不会发生 ArgumentNullException 之类的事情,因此不需要处理等。

【讨论】:

  • 这回答了如何处理异常,而不是如何知道可以抛出哪些可能的异常。
  • @DavidS。问题是,您大多不需要知道(而且并非所有库都有正确/完整的文档,所以无论如何,获得一个全面的列表是一个白日梦)。因此,您编写的代码可确保您使用的函数传递正确的参数,让您只处理实际的异常情况,就像我在上面解释的那样
【解决方案2】:

与 Java 不同,C# 不需要在方法的签名中列出潜在的异常。这有一些好的方面和一些坏的方面。你刚刚遇到了不好的一面。

你不知道会抛出什么异常,除非

  • 您正在调用的方法有据可查,并列出了潜在的例外情况(最佳情况)
  • 您知道具体的不良案例,运行它们并查看它们创建了哪些异常(不良案例)
  • 您不知道会出现什么问题并记录所有内容,每次发生意外情况时都会修改您的捕获(最坏情况)

【讨论】:

    【解决方案3】:

    没有自动显示的内置功能,但是您将插入符号放在方法名称的某处,然后按 CTRLSpace。此处显示的信息将与您的链接中的信息相同,因此它应该显示 DownloadString 方法的两个例外情况。

    将鼠标悬停在 DownloadString 上不一定会显示与单击方法名称并按 CTRLSpace 相同的信息(后者显示例外情况是方法抛出)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 1970-01-01
      相关资源
      最近更新 更多