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

Обновлен: Ноябрь 2007

Блок 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;
        }
        finally
        {
            Console.Write("i = {0}", i);
        }
    }
}

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

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

i = 123

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

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

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

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

  • 5.3.3.14 Операторы try-finally

  • 8.11 Оператор try

  • 16 Исключения

См. также

Задачи

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

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

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

Ссылки

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

The try, catch, and throw Statements

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

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

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

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

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