Что выведет код Middle Исключения спрашивают часто обновлено

Порядок try, catch и finally

Вопрос

Что выведет программа (.NET 8)? По строке на каждый вывод.

try
{
    Run();
}
catch (Exception e)
{
    Console.WriteLine("outer catch: " + e.Message);
}

static void Run()
{
    try
    {
        Console.WriteLine("try");
        throw new InvalidOperationException("boom");
    }
    catch (ArgumentException)
    {
        Console.WriteLine("arg catch");
    }
    finally
    {
        Console.WriteLine("finally");
    }
    Console.WriteLine("after");
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: try, finally, outer catch: boom. Внутренний catch ловит только ArgumentException, а брошено InvalidOperationException, поэтому он пропускается. finally выполняется при выходе из блока, затем исключение уходит к вызывающему: outer catch: boom.

Что выведет

try
finally
outer catch: boom

Разбор

Внутренний catch ловит только ArgumentException, а брошено InvalidOperationException, поэтому он пропускается. finally выполняется при выходе из блока, затем исключение уходит к вызывающему: outer catch: boom. Строка after не печатается.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.