繁体   English   中英

在visual studio 2010中自动生成捕获

[英]auto generated catch in visual studio 2010

有没有办法,自动生成“catch”,对于所有可能的异常,一个方法可以在vs 2010或第三方应用程序中抛出?

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

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

有一个工具可以在您的代码中找到未处理的异常: Red Gate软件的Exception Hunter

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

随着.NET 4.0和WPF的发布,CLR可以抛出的异常数量大大增加,达到了压倒性的程度。 排除列表不再涵盖CLR可能抛出的所有不太可能的异常。 这意味着,虽然Exception Hunter将提供准确的结果,但这些结果将包括一长串潜在的例外情况,其中大多数都无需担心。

这应该表明“捕获方法可以抛出的所有异常”可能是一个坏主意。 通常的模式是全球化

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

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

只有在您希望发生此异常的特殊情况下才能直接在代码中处理异常,并且您知道如何专门处理此异常以及如何继续执行程序。


作为旁注:您想要的内容与名为“已检查异常 ”的Java功能非常相似:它会强制您处理异常或声明您的方法将重新抛出异常。 以下问题解释了为什么C#的设计者故意选择包含此功能:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM