在第一个示例中,您可以重新抛出异常,并且finally中的代码仍然会运行。这在第二个示例中是不可能的。
如果您选择不重新抛出异常,那么是的,几乎没有什么区别。然而,这被认为是bad form - very rarely如果您需要消耗您无法消耗的异常显式处理.
它是一个帮助您执行代码流程的关键字。当您抛出异常时,代码的执行流程会受到影响(例如使用return
), the finally
关键字允许您表达当异常发生时(或者您return
from a try
)你仍然希望执行在离开时做一些事情。
开玩笑地回答这个问题,需要的时候必须,不需要的时候就不需要。
Further Reading
为了安全起见,在尝试开始使用此关键字之前,请阅读其文档:
http://msdn.microsoft.com/en-us/library/zwc8s4fz.aspx
以及一般的异常处理关键字:
http://msdn.microsoft.com/en-us/library/s7fekhdy.aspx
Examples
捕获异常并对其执行某些操作,然后重新抛出它。使用finally
调用任何整理代码:
try
{
OpenConnectionToDatabase();
// something likely to fail
}
catch (Exception ex)
{
Log(ex);
throw;
// throw ex; // also works but behaves differently
}
// Not specifying an exception parameter also works, but you don't get exception details.
//catch (Exception)
//{
// Log("Something went wrong);
// throw;
//}
finally
{
CloseConnectionToDatabase();
}
不要对捕获异常感兴趣,而是使用finally
整理代码:
try
{
OpenConnectionToDatabase();
// something likely to fail
}
finally
{
CloseConnectionToDatabase();
}
从你的返回try
因为它看起来格式很好,但仍然使用finally
整理代码:
try
{
OpenConnectionToDatabase();
return 42;
}
finally
{
CloseConnectionToDatabase();
}