如何处理异常?

时间:2010-12-12 19:23:36

标签: c# silverlight

这是关于最佳.net实践的问题。我总是在我的所有Web和窗体表单应用程序中捕获并存储有关异常的信息,如下所示:

  1. 使用try catch(异常异常)
  2. 包围每个方法
  3. 对于除前层之外的任何图层,将异常抛向上面的图层
  4. 在前层,将异常记录到日志文件中(通常使用log4config.dll),并向用户显示用户友好的消息。
  5. 这是处理异常的最佳方法吗?或者我应该在下一个项目中做些不同的事情?

4 个答案:

答案 0 :(得分:6)

我不会添加1& 2除非我有某些具体原因;例如改变(包装)消息;没有必要,因为无论如何异常都会提升。如果做得不正确,您可能会意外删除所有重要的堆栈跟踪(throw; vs throw ex; - 首先是首选。)

答案 1 :(得分:2)

您可以在Best Practices for Handling Exceptions

获得最佳答案

答案 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. ");
    }
}