5

考虑以下代码,其中 LockDevice() 可能会失败并自行引发异常。如果在 finally 块中引发异常,在 C# 中会发生什么?

解锁设备();

尝试
{
  DoSomethingWithDevice();
}
最后
{
  锁定设备();// 可能会因异常而失败
}
4

2 回答 2

10

如果它不在 finally 块中会发生完全相同的事情 - 异常可能会从该点传播。如果需要,您可以在 finally 中尝试/捕获:

try
{
    DoSomethingWithDevice();
}
finally
{
    try
    {
        LockDevice();
    }
    catch (...)
    {
        ...
    }
}
于 2010-03-25T09:03:26.553 回答
-2

该方法称为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()
   }
}
于 2010-03-25T09:05:00.530 回答