Что происходит с возвращаемым значением после исключения в блоке finally? - PullRequest
9 голосов
/ 07 марта 2012

Я написал следующий тестовый код, хотя я был почти уверен, что произойдет:

static void Main(string[] args)
{
    Console.WriteLine(Test().ToString());
    Console.ReadKey(false);
}

static bool Test()
{
    try
    {
        try
        {
            return true;
        }
        finally
        {
            throw new Exception();
        }
    }
    catch (Exception)
    {
        return false;
    }
}

Конечно, программа написала «False» на консоли.Мой вопрос: что происходит с истиной, которая первоначально возвращается?Есть ли способ получить это значение, в блоке catch, если это возможно, или в оригинальном блоке finally, если нет?

Просто для пояснения, это только для образовательных целей.Я бы никогда не сделал такую ​​запутанную систему исключений в реальной программе.

1 Ответ

5 голосов
/ 07 марта 2012

Нет, получить это значение невозможно, потому что, в конце концов, возвращается только bool.Вы можете установить переменную, хотя.

static bool Test()
{
    bool returnValue;

    try
    {
        try
        {
            return returnValue = true;
        }
        finally
        {
            throw new Exception();
        }
    }
    catch (Exception)
    {
        Console.WriteLine("In the catch block, got {0}", returnValue);
        return false;
    }
}

Хотя это грязно.А в образовательных целях ответ - нет.

...