两个条件有什么区别?每次运行method1或method2时,都应该有一个运行所需的代码块.在我看来,2方法是相同的.
// example method1
void Method1(void)
{
try
{
// do something
}
catch (Exception ex)
{
// do something
}
finally
{
// do something whenever method1 runs
}
}
// example method2
void Method2(void)
{
try
{
// do something
}
catch (Exception ex)
{
// do something
}
// do something whenever method2 runs
}
Run Code Online (Sandbox Code Playgroud)
最后块对我来说似乎没必要.
Ada*_*rth 16
在第一个示例中,您可以重新抛出异常,finally中的代码仍然会运行.这在第二个例子中是不可能的.
如果你选择不重新抛出异常,那么是没有什么区别.但是,这被认为是错误的形式 - 您很少需要使用无法显式处理的异常.
它是一个帮助您执行代码的关键字.当你抛出异常时,代码的执行流程会受到影响(比如使用return),finally关键字允许你表示当发生异常时(或者你return来自a try),你仍然希望执行在它离开时做某事.
要以诙谐的方式回答这个问题,必须在需要时,而不是在需要时.
为安全起见,在您尝试开始使用此关键字之前,请阅读相关文档:
http://msdn.microsoft.com/en-us/library/zwc8s4fz.aspx
一般的异常处理关键字:
http://msdn.microsoft.com/en-us/library/s7fekhdy.aspx
捕获异常以使用它做某事,然后重新抛出它.使用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();
}
Run Code Online (Sandbox Code Playgroud)
不要注意捕获异常的任何兴趣,但用于finally整理代码:
try
{
OpenConnectionToDatabase();
// something likely to fail
}
finally
{
CloseConnectionToDatabase();
}
Run Code Online (Sandbox Code Playgroud)
从你的返回,try因为它看起来格式很好,但仍然用于finally整理代码:
try
{
OpenConnectionToDatabase();
return 42;
}
finally
{
CloseConnectionToDatabase();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1697 次 |
| 最近记录: |