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

时间:2014-02-13 09:25:06

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

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

XslCompiledTransform myObject;

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

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

3 个答案:

答案 0 :(得分:3)

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

这意味着在您的示例中:

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

记住捕获特定的异常只是有趣的是你有一个特定的异常处理关联。如果它只是“记录然后重新抛出”,那么就不要捕获特定的异常。


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

  

随着.NET 4.0和WPF的发布,异常的数量   CLR可以投掷大大增加,到了存在的程度   压倒。排除列表不再涵盖所有不太可能的情况   CLR可能抛出的异常。这意味着,虽然例外   亨特将提供准确的结果,这些结果将包括一个   很长的潜在例外清单,其中大部分都不用担心   关于。实质上,该工具已经变得不那么有用了   你的工作比应该的更难。这与我们的巧妙相悖   简单的风气,所以我们决定停止销售新的许可证   产品

答案 1 :(得分:2)

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

通常会尝试在最高逻辑级别捕获它们,您可以在应用程序上保持足够的灵活性,使决策者throw或以某种方式处理它。

答案 2 :(得分:1)

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

Visual Studio shown related exception