Возвращаясь из функции через блок catch, что происходит с блоком finally? - PullRequest
6 голосов
/ 08 декабря 2010

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

Это правильная практика?

try
{
// do something
}

catch (Exception)
{    
  return false;
}
finally
{
  if (connection.State == ConnectionState.Open) connection.Close();
}

Ответы [ 4 ]

6 голосов
/ 08 декабря 2010

Он выполнит блок «finally» после возврата. «Наконец» используется для некоторой практики, такой как тесное соединение с базой данных (всегда нужно делать)

2 голосов
/ 08 декабря 2010

наконец, блок всегда выполняется.В вашем случае это выполняется перед вашим оператором возврата.

1 голос
/ 08 декабря 2010

Вы можете попробовать с самим собой

private bool test()
    {
        try
        {
            int i = 0;
           int u = 10 / i;
        }

        catch (Exception)
        {
            return false;
        }
        finally
        {

        }
        return true;
    }

так что это исключение деления на ноль. Когда вы выполните этот код, наконец будет выполнен и после возврата будет выполнен.

это что-то вроде Runtime, возвращаемого результата в случае блокировки finally!

0 голосов
/ 17 декабря 2010

Блок finally всегда будет выполняться до выхода кода из блока try-catch-finally (любое условие, например ThreadAbortException, которое препятствует выполнению блока finally, будет препятствовать выходу кода из блока try-catch-finally).

...