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#.
См. также
Задачи
Практическое руководство. Явное создание исключения
Ссылки
try, catch, and throw Statements (C++)
Операторы обработки исключений (Справочник по C#)
Основные понятия
Руководство по программированию на C#
Другие ресурсы
Журнал изменений
Дата |
Журнал |
Причина |
---|---|---|
Май 2010 |
В пример добавлены операторы write и инструкции для более четкого представления результатов. |
Обратная связь от клиента. |