Почему внешнее «finally» не выполняется, когда внутреннее «catch» выбрасывает?

Я написал простую программу для проверки теории о том, что блок «finally» всегда будет выполняться, несмотря ни на что. Но то, что я вижу из приведенной ниже pgm, заключается в том, что управление, кажется, никогда не входит во внешний блок finaly.

Я пробовал использовать F5, а также Ctrl-F5 в Visual Studio, и результат тот же.

Кто-нибудь может объяснить, почему я вижу такое поведение?

Вывод в окне консоли:

внутренний улов

внутренний улов

внешний улов

необработанное исключение:

..и затем приложение вылетает

public class Program
{
    static void Main()
    {
        try
        {
            try
            {
                string s = null;
                s.ToString();
            }
            catch
            {
                Console.WriteLine("inner catch");
                throw;
            }
            finally
            {
                Console.WriteLine("inner finally");
            }

            return;
        }
        catch
        {
            Console.WriteLine("outer catch");
            throw;
        }
        finally
        {
            Console.WriteLine("outer finally");
        }
    }
}
6
задан user330612 23 March 2012 в 00:47
поделиться