[英]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.