帮助finally块中的异常处理

时间:2011-05-17 06:29:18

标签: c# .net exception-handling try-catch-finally

我试图使用try-catch-finally块捕获异常。我在catch块中捕获了异常,并使用全局异常变量将其传递给finally块。这样做,我已经处理了finally块中的异常情况。我知道这听起来很奇怪,但有必要这样做。如果有相同的编码标准问题,请告诉我。此外,如果你可以提出相同的建议,我将非常感激。

感谢。

2 个答案:

答案 0 :(得分:4)

catch用于捕获异常并执行任何必要的异常处理。 finally块用于清理任何左侧打开的资源,如文件句柄,数据库连接等。此块大部分时间运行,因此是正确的清理位置但是没有处理例外本身,那些应该在catch块中处理。

答案 1 :(得分:2)

如果按预期使用, try-catch-finally 模式是一个非常有用且功能强大的模式。处理finally块中的异常是推荐,并且没有太多(任何?)的意义 尝试重新组织代码以适应模式,而不是相反。

小例子:

var reader = new StreamReader(path);
try
{
   // Do your work here
   reader.ReadToEnd();
}
catch (IOException ex)
{
    // Handle specific error here
    ShowUserError(ex.Message);
}
catch (Exception ex)
{
    // Handle general error here
    LogError(ex);
}
finally
{
   // Perform clean up here
   // This code will run regardless if there was an error or not
   reader.Close();
}

另外,请查看Try...Catch...Finally Statements的MSDN文档。