Kyl*_*Lib 12 c# exception-handling
我的任务是编写一个我正在研究的.NET/C#项目的异常处理策略和指南文档.我很难接受它.有很多关于如何/何时抛出,捕获,包装异常的信息,但我正在寻找描述catch块内部应该进行哪些事情,而不是包装和抛出异常.
try
{
DoSomethingNotNice();
}
catch (ExceptionICanHandle ex)
{
//Looking for examples of what people are doing in catch blocks
//other than throw or wrapping the exception, and throwing.
}
Run Code Online (Sandbox Code Playgroud)
提前致谢
Kei*_*thS 13
这意味着什么.如果您期望正在运行的代码抛出异常,并且当抛出该异常时您的代码知道出了什么问题以及如何继续,那么捕获异常并处理它.
基本上,规则存在以防止反模式,如:
try
{
...
}
catch(Exception ex)
{
throw;
}
Run Code Online (Sandbox Code Playgroud)
这里的捕获只会添加一个减速带来解除调用堆栈.如果你真的不希望任何事情,你抓住的例外,你甚至不应该打扰捕获.
一个相关但更有效的案例是你不关心被抛出的异常,但是你需要在所有情况下进行清理.在这种情况下,跳过捕获; 你不需要它,只需将它作为try-finally块.
编辑:要回答帖子中的问题,而不仅仅是主题,您可以编写如下规则:"不要编写不执行任何操作的try-catch语句,或者只重新捕获捕获的异常.所有catch语句都应该执行一些与抛出的例外有关的增值行动."
例如,假设您尝试使用用户在登录应用程序时提供的凭据连接到SQL Server实例.许多事情可能会出错,其中一些你不能指望,其中一些你应该.
所有这些示例都涉及首先捕获已知类型的异常并询问它以查看确切的错误,然后执行一些可以允许程序继续执行的已知操作.目的是防止应用程序在出现错误时崩溃和刻录,以防止您知道可能出错,但知道在这种情况下如何保持程序运行.
捕获异常的基本规则: