Поделиться через


try-finally (Справочник по C#)

Блок finally позволяет освободить все ресурсы, выделенные в блоке try, а также выполнить код, который должен выполняться даже в случае возникновения исключения. Управление всегда передается блоку finally независимо от того, как была завершена обработка блока try.

Если для обработки исключений, происходящих в блоке инструкций используется блок catch, то блок finally позволяет гарантировать, что определенный набор инструкций будет выполнен независимо от того, как был осуществлен выход из блока try.

Пример

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

    public class ThrowTest
    {
        static void Main()
        {
            int i = 123;
            string s = "Some string";
            object o = s;

            try
            {
                // Invalid conversion; o contains a string, not an int
                i = (int)o;

                Console.WriteLine("WriteLine at the end of the try block.");
            }
            finally
            {
                // To run the program in Visual Studio, type CTRL+F5. Then 
                // click Cancel in the error dialog.
                Console.WriteLine("\nThe finally block is executed, even though"
                    + " an error was caught in the try block.");
                Console.WriteLine("i = {0}", i);
            }
        }
        // Output:
        // Unhandled Exception: System.InvalidCastException: Specified cast is not valid.
        // at ValueEquality.ThrowTest.Main() in c:\users\sahnnyj\documents\visual studio
        // 2010\Projects\ConsoleApplication9\Program.cs:line 21
        //
        // The finally block is executed, even though an error was caught in the try block.
        // i = 123
    }

В приведенном выше примере произойдет исключение System.InvalidCastException.

Хотя исключение и было перехвачено, инструкция вывода в блоке finally все равно будет выполнена, т. е. на экран будет выведена строка:

i = 123

Дополнительные сведения о блоке finally см. в разделе try-catch-finally.

В C# также предусмотрен оператор using, который предоставляет удобный синтаксис для точно такой же функциональности, что и оператор try-finally.

Спецификация языка C#

Дополнительные сведения см в Спецификация языка C#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.

См. также

Задачи

Практическое руководство. Явное создание исключения

Ссылки

Ключевые слова C#

try, catch, and throw Statements (C++)

Операторы обработки исключений (Справочник по C#)

throw (Справочник по C#)

try-catch (Справочник по C#)

Основные понятия

Руководство по программированию на C#

Другие ресурсы

Справочник по C#

Журнал изменений

Дата

Журнал

Причина

Май 2010

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

Обратная связь от клиента.