在 Visual Studio 2010 中自动生成捕获

本文关键字:自动生成 2010 Visual Studio | 更新日期: 2023-09-27 18:32:13

有什么方法可以自动生成方法可以抛出的"catch",对于所有可能的异常,在 vs 2010 或第三方应用程序中

例如,如果我使用"Directory.CreateDirectory",它将自动创建:

try
{
 Directory.CreateDirectory("blabla");
}
catch (PathTooLongException)
{}
catch (DirectoryNotFoundException)
{}
catch (IOException)
{}
catch (ArgumentNullException)
{}
catch (UnauthorizedAccessException)
{}

在 Visual Studio 2010 中自动生成捕获

有一个工具可以在代码中查找未经处理的异常:Red Gate 软件的异常猎人。

事实证明,他们停止了它:

随着 .NET 4.0 和 WPF 的发布,CLR 可以引发的异常数量大大增加,以至于不堪重负。排除项列表无法再涵盖 CLR 可能引发的所有不太可能的异常。这意味着,尽管异常猎人将提供准确的结果,但这些结果将包括一长串潜在的异常,其中大多数都无需担心。

这应该表明"捕获方法可能引发的所有异常"可能是一个坏主意。通常的模式是有一个全球包罗万象

try {
    ...
} catch (Exception ex) {
    logAndShowErrorMessage(ex);
}

仅在用户界面的顶层 (WinForms),或处理专用方法中的错误 (WPF: Application.DispatcherUnhandledException, WebForms: Application.Error)。

只有在您预计会发生此异常的异常情况下,才直接在代码中处理异常,并且您知道如何专门处理此异常以及如何在之后继续执行程序。


作为旁注:你想要的看起来与称为"检查异常"的Java功能非常相似:它强制你要么处理异常,要么声明你的方法将重新抛出它。以下问题解释了为什么 C# 的设计者故意选择不包含此功能:

  • 为什么不在 .NET 中选中异常?

默默忽略异常是非常糟糕的做法,因此,当然,没有办法在空体的情况下自动生成捕获。此外,该方法可以抛出哪些异常是未知的,因为在 C# 中,不会声明函数可能抛出哪些异常(与例如 Java 相反)。

如果你仍然想忽略所有的异常,你可以只写catch(Exception),这将捕获所有的异常,因为所有的异常都是从基Exception类继承而来的。但是你确定默默地忽略可能发生的一切是个好主意吗?最好让用户(或调用方)知道出了问题,而不是默默地不做预期的工作(想象一下,例如,如果Directory.CreateDirectory会以这种方式行事,这样你永远不知道它是否成功创建了目录,如果没有,原因是什么。