Сработает ли код в операторе finally, если я верну значение в блоке Try? - PullRequest
218 голосов
/ 05 декабря 2008

Я проверяю некоторый код для друга и говорю, что он использовал оператор return внутри блока try-finally. Код в разделе, наконец, все еще срабатывает, хотя остальная часть блока try не запускается?

Пример:

public bool someMethod()
{
  try
  {
    return true;
    throw new Exception("test"); // doesn't seem to get executed
  }
  finally
  {
    //code in question
  }
}

Ответы [ 12 ]

0 голосов
/ 14 апреля 2016

Основная цель блока finally - выполнить все, что написано внутри него. Это не должно зависеть от того, что происходит в try или catch. Однако с System.Environment.Exit (1) приложение будет закрываться без перехода к следующей строке кода.

0 голосов
/ 16 декабря 2015

99% сценариев будет гарантировано, что код внутри блока finally будет выполняться, однако, подумайте об этом сценарии: у вас есть поток, который имеет блок try -> finally (нет catch) и вы получите необработанное исключение в этом потоке. В этом случае поток завершится, и его блок finally не будет выполнен (в этом случае приложение может продолжить работу)

Этот сценарий довольно редкий, но он только показывает, что ответом не всегда является «Да», чаще всего «Да», а иногда, в редких случаях, «Нет».

...