自动生成与异常相关的catch块的Visual Studio功能?

4

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

XslCompiledTransform myObject;

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

在Visual Studio 2012中,是否有一个菜单选项或功能可以自动生成所有可能发生在XslCompiledTransform中的异常的catch块?类似于“生成catch块”?


你是在指像“实现接口”选项这样的“特性”,还是某种更抽象的编程指南? - Andrei V
更多的问题是,VS 2012是否有像“生成catch块”这样的菜单选项 :-) - Robert Strauch
1
我猜是这样。我认为你问题的标签有点误导性。没有提到“Visual Studio”。我同意Tigran的答案,但它并没有真正涉及到这个问题。我认为他也被问题/标签所迷惑了。你能否编辑一下你的问题,使其更清晰一些? - Andrei V
@Robert 我更新了我的答案,添加了关于工具的信息。 - ken2k
2
我猜这个想法是来自于Eclipse/NetBeans对Java的处理方式?简短的回答是否定的,而且可能永远不会实现。Java中的方法在方法签名中包括抛出的异常,这意味着在IDE中很容易快速地完成,而无需先阅读代码。此外,大多数情况下,您将希望稍后抛出和处理这些异常,或者根本不处理。 - Joe
3个回答

3

我个人认为这通常不是一个好的做法。在我看来,你只应该捕获可能会抛出的异常。

这意味着在你的例子中:

  • 你不应该在你的例子中捕获 ArgumentNullException,而是在调用方法之前检查 input/output 是否为空
  • 除非你有不同的异常处理方式,否则我会捕获 IOException 而不是 DirectoryNotFoundException/FileNotFoundException

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


编辑:我认为你正在寻找一种能够完成这项工作的工具。我不知道是否有这样的工具(你可以在visualstudiogallery上查找)。但有趣的是,RedGate的Exception Hunter这个工具已经因为有趣的原因而停止使用。看一下:

随着.NET 4.0和WPF的发布,CLR可能抛出的异常数量大大增加,甚至变得不可承受。排除列表无法覆盖CLR可能抛出的所有不太可能的异常。这意味着,虽然Exception Hunter将提供准确的结果,但这些结果将包括一个潜在异常的长列表,其中大多数都不需要担心。实际上,这个工具变得不太可用,会让你的工作比应该更困难。这与我们巧妙简单的理念背道而驰,因此我们决定停止销售该产品的新许可证。


2

不是不好的做法,只要符合你的需求。很难说它是否适合你,因为这取决于你的应用程序结构和预期行为。

通常尽可能在最高的逻辑层面上捕获它们,在这个层面上,你足够灵活,在抛出异常或以某种方式处理它之间做出决定。


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

Visual Studio shown related exception


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接