练习使用try-catch-finally

时间:2011-01-08 11:41:26

标签: c#

哪一个是与UI层try-catch和n层应用程序中的良好实践的良好组合以及为什么?

1

 try
    {
     //Statements
    }
    catch
    {
      throw
    }
    finally
    {
     //cleanup codes
    }

OR

2

 try
    {
      // statements
    }
    catch(Exception ex)
    {
    }
    finally
    {
     // clean up
    }

并在UI图层中

try{
}
catch(Exception ex)
{
 Log(ex);
}
finally
{
  //clean up
}

2 个答案:

答案 0 :(得分:1)

在第一个中,catchthrow完全没有意义,如果你想确保清理,你应该使用tryfinally

第二种是危险的,永远不应该使用。代码不应该包含吞噬每个异常的catch,只是在没有解释的情况下忽略它。在极少数情况下,您需要捕获异常并忽略它,您应该尝试将其限制为特定类型的异常,并且应始终在代码中包含注释,以解释忽略异常的原因。

第三个例子很好用。我假设您在try块中有更多异常处理,它捕获您预期的特定异常类型,并在需要时通知用户该问题。

答案 1 :(得分:0)

通常的做法是在业务/服务层使用try / finally(或using语句),以确保正确清理资源。

在物理层边界,您可能需要长期例外,因此您可能会遇到以下情况:

try
{
} 
catch(Exception ex)
{
   ... log exception
   throw;
}

也许是UI层中的顶级异常处理程序(try / catch)。