假设我在C#中有以下方法:
XslCompiledTransform myObject;
public void foo() {
try {
myObject.Transform(input, output);
} catch (???) {
}
}
在Visual Studio 2012中,是否有一个菜单选项或功能可以自动生成所有可能发生在XslCompiledTransform
中的异常的catch
块?类似于“生成catch块”?
假设我在C#中有以下方法:
XslCompiledTransform myObject;
public void foo() {
try {
myObject.Transform(input, output);
} catch (???) {
}
}
在Visual Studio 2012中,是否有一个菜单选项或功能可以自动生成所有可能发生在XslCompiledTransform
中的异常的catch
块?类似于“生成catch块”?
我个人认为这通常不是一个好的做法。在我看来,你只应该捕获可能会抛出的异常。
这意味着在你的例子中:
ArgumentNullException
,而是在调用方法之前检查 input
/output
是否为空IOException
而不是 DirectoryNotFoundException
/FileNotFoundException
记住,捕获特定的异常只有在你有特定的异常处理关联时才有意义。如果只是“记录然后重新抛出”,那么不要捕获特定的异常。
编辑:我认为你正在寻找一种能够完成这项工作的工具。我不知道是否有这样的工具(你可以在visualstudiogallery上查找)。但有趣的是,RedGate的Exception Hunter这个工具已经因为有趣的原因而停止使用。看一下:
随着.NET 4.0和WPF的发布,CLR可能抛出的异常数量大大增加,甚至变得不可承受。排除列表无法覆盖CLR可能抛出的所有不太可能的异常。这意味着,虽然Exception Hunter将提供准确的结果,但这些结果将包括一个潜在异常的长列表,其中大多数都不需要担心。实际上,这个工具变得不太可用,会让你的工作比应该更困难。这与我们巧妙简单的理念背道而驰,因此我们决定停止销售该产品的新许可证。
不是不好的做法,只要符合你的需求。很难说它是否适合你,因为这取决于你的应用程序结构和预期行为。
通常尽可能在最高的逻辑层面上捕获它们,在这个层面上,你足够灵活,在抛出异常或以某种方式处理它之间做出决定。