这是关于最佳.net实践的问题。我总是在我的所有Web和窗体表单应用程序中捕获并存储有关异常的信息,如下所示:
这是处理异常的最佳方法吗?或者我应该在下一个项目中做些不同的事情?
答案 0 :(得分:6)
我不会添加1& 2除非我有某些具体原因;例如改变(包装)消息;没有必要,因为无论如何异常都会提升。如果做得不正确,您可能会意外删除所有重要的堆栈跟踪(throw;
vs throw ex;
- 首先是首选。)
答案 1 :(得分:2)
答案 2 :(得分:2)
以下代码存在问题,因为它会覆盖e
的原始堆栈跟踪,这会使问题更难诊断:
public void Foo() {
try {
Bar();
} catch(Exception e) {
throw e; // re-throw; overwrites original stacktrace in 'e'
}
}
以下代码没有上面的stacktrace覆盖问题,但仍然是不必要的冗长:
public void Foo() {
try {
Bar();
} catch(Exception e) {
throw; // re-throw; preserves original stacktrace in 'e'
}
}
两者都会写得更好,如下所示。这是因为,如果您在catch块中唯一要做的就是重新抛出异常,则根本不需要编写catch块:
public void Foo() {
Bar();
}
答案 3 :(得分:-1)
以下是 NOT 处理异常的方式。
public void method1(){
try{
....
// all the code goes here
// declare any helper methods throw throwable
// eg: private boolean check1() throws Throwable{ ...}
....
}catch(Throwable t){
System.out.println("oops...error...good luck debugging. ");
}
}