Это очень двусмысленно сформулировано.Они пытались указать, что любые finally
блоки любых вложенных try
блоков 1 (у которых не было соответствующего блока catch
для исключения) будутбудет выполнен, затем блок catch
, который соответствует exception
(и затем его собственному finally
, очевидно, если только он не вызывает другое исключение, которое не обработано, и среда выполнения сорвана, что может произойти).
Это печатает A
, B
, C
:
try {
try {
throw new Exception();
}
catch (ArgumentOutOfRangeException ex)
{
Console.WriteLine("No!");
}
finally
{
Console.WriteLine("A");
}
}
catch (Exception ex2)
{
Console.WriteLine("B");
}
finally
{
Console.WriteLine("C");
}
Подсказка, о которой он не говорит, это его собственная finally
в том, что он относится к finally
блоку s - множественное число.Поскольку каждый try
может иметь только один finally
, он должен ссылаться на другие блоки finally
.
1 В пределах самого блока try
или внутридругой код, вызываемый try
.