考虑以下代码,其中 LockDevice() 可能会失败并自行引发异常。如果在 finally 块中引发异常,在 C# 中会发生什么?
解锁设备(); 尝试 { DoSomethingWithDevice(); } 最后 { 锁定设备();// 可能会因异常而失败 }
如果它不在 finally 块中会发生完全相同的事情 - 异常可能会从该点传播。如果需要,您可以在 finally 中尝试/捕获:
try
{
DoSomethingWithDevice();
}
finally
{
try
{
LockDevice();
}
catch (...)
{
...
}
}
该方法称为Try / Catch
你的收获在哪里?
UnlockDevice();
try
{
DoSomethingWithDevice();
}
catch(Exception ex)
{
// Do something with the error on DoSomethingWithDevice()
}
finally
{
try
{
LockDevice(); // can fail with an exception
}
catch (Exception ex)
{
// Do something with the error on LockDevice()
}
}