这是关于最佳.net实践的问题.我总是在我的所有Web和窗体表单应用程序中捕获并存储有关异常的信息,如下所示:
这是处理异常的最佳方法吗?或者我应该在下一个项目中做些不同的事情?
除非我有一些具体的原因,否则我不会加1和2; 例如改变(包装)消息; 没有必要,因为无论如何异常都会提升.并且做得不正确,您可能会意外删除所有重要的堆栈跟踪(throw;
vs throw ex;
- 第一个是首选).
以下代码存在问题,因为它覆盖了 的原始堆栈跟踪e
,这使得问题更难以诊断:
public void Foo() {
try {
Bar();
} catch(Exception e) {
throw e; // re-throw; overwrites original stacktrace in 'e'
}
}
Run Code Online (Sandbox Code Playgroud)
以下代码不存在上述堆栈跟踪覆盖问题,但仍然不必要地冗长:
public void Foo() {
try {
Bar();
} catch(Exception e) {
throw; // re-throw; preserves original stacktrace in 'e'
}
}
Run Code Online (Sandbox Code Playgroud)
两者都写成下面的形式会更好。这是因为,如果您在 catch 块中所做的唯一事情是重新抛出异常,则根本不需要编写 catch 块:
public void Foo() {
Bar();
}
Run Code Online (Sandbox Code Playgroud)