【问题标题】:Visual Studio feature for automatically generating relevant catch-blocks for exceptions?用于为异常自动生成相关捕获块的 Visual Studio 功能?
【发布时间】:2014-02-13 09:25:05
【问题描述】:

假设我在 C# 中有以下方法:

XslCompiledTransform myObject;

public void foo() {
  try {
    myObject.Transform(input, output);
  } catch (???) {
  }
}

Visual Studio 2012 中是否有菜单选项或功能可以自动为XslCompiledTransform 中可能发生的异常生成所有catch 块?比如“生成捕获块”?

【问题讨论】:

  • 您指的是“实现接口”选项之类的“功能”还是某种更抽象的编程指南?
  • 如果 VS 2012 有一些菜单选项,如“生成捕获块”:-)
  • 我想是的。我觉得你问题上的标签有点误导。没有提到“Visual Studio”。我同意 Tigran 的回答,但与这个问题并没有真正的关系。我认为他也被问题/标签所抛弃。您能否编辑您的问题以使其更清晰?
  • @Robert 我更新了我的答案以添加有关工具的信息
  • 我猜这个想法是来自 eclipse/netbeans 如何为 Java 做的?简短的回答是否定的,而且可能永远不会。 Java 中的方法包括方法签名中抛出的异常,这意味着在 IDE 中无需先阅读代码即可快速轻松地完成。此外,大多数情况下,您会希望稍后或根本不抛出和处理这些异常。

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


【解决方案1】:

我个人认为这通常不是一个好习惯。 IMO 你应该只捕获你认为可能被抛出的异常。

这意味着在您的示例中:

  • 您不应在示例中捕获 ArgumentNullException,但在调用您的方法之前检查 input/output 是否不为空
  • 我会捕获 IOException 而不是 DirectoryNotFoundException/FileNotFoundException 除非您对这两种情况有不同的异常处理

记住捕获特定异常只有在您有关联的特定异常处理时才有意义。如果只是“记录然后重新抛出”,那么不要捕获特定的异常。


编辑:我假设您正在寻找可以完成这项工作的工具。我不知道这样的工具(您可能想查看visualstudiogallery)。有趣的是,Exception Hunter,一个来自 RedGate 的用于完成这项工作的工具,由于有趣的原因已经停止使用。看看:

随着 .NET 4.0 和 WPF 的发布,出现的异常数量 CLR 可以扔的东西大大增加,到了 压倒。排除列表不再涵盖所有不太可能的情况 CLR 可能抛出的异常。这意味着,尽管 Exception Hunter 将提供准确的结果,这些结果将包括 一长串潜在的例外情况,其中大部分没什么好担心的 关于。从本质上讲,该工具已变得不那么可用,并且使 你的工作比应有的更难。这违背了我们的巧妙 简单的精神,所以我们决定停止销售新的许可证 产品。

【讨论】:

    【解决方案2】:

    不,这不是坏习惯,它符合您的需求。很难说它是否适合您,因为这取决于您的应用程序结构和预期行为。

    通常尝试在尽可能高的逻辑级别上捕获它们,在这种情况下,您在应用程序上足够灵活,可以做出决定以 throw 它或以某种方式处理它。

    【讨论】:

      【解决方案3】:

      不,没有智能方法可以自动生成所有可能异常的所有 catch 块。但是 Visual Studio 显示了函数调用的相关异常列表,如下所示。

      【讨论】:

        猜你喜欢
        • 2010-09-05
        • 2012-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-02
        • 1970-01-01
        • 2020-12-28
        相关资源
        最近更新 更多