Блок Finally
Часть раздела Логика и управление потоком путешествия по C# на Coddy. Урок 27 из 66.
Блок finally содержит код, который всегда выполняется, независимо от того, возникает исключение или нет, даже если в блоках try или catch есть оператор return.
Создайте базовую структуру try-catch-finally:
try
{
// Код, который может выбросить исключение
int result = 10 / 2;
Console.WriteLine("Result: " + result);
}
catch (DivideByZeroException ex)
{
// Код, который обрабатывает исключение
Console.WriteLine("Cannot divide by zero: " + ex.Message);
}
finally
{
// Код, который всегда выполняется
Console.WriteLine("This always executes");
}
Блок finally полезен для задач очистки, таких как закрытие файлов или подключений к базе данных:
System.IO.StreamReader file = null;
try
{
file = new System.IO.StreamReader("data.txt");
string content = file.ReadToEnd();
Console.WriteLine(content);
}
catch (System.IO.FileNotFoundException)
{
Console.WriteLine("File not found.");
}
finally
{
// Всегда закрывайте файл, даже если произошло исключение
if (file != null)
{
file.Close();
}
}
Задание
ЛегкоСоздайте метод с именем ProcessData, который:
- Принимает строковый параметр, представляющий имя файла
- Пытается открыть файл и прочитать его содержимое
- Выводит содержимое в консоль
- Правильно освобождает ресурсы с использованием блока finally
- Обрабатывает FileNotFoundException и IOException
Если файл не найден, выведите: "ERROR: File not found: [filename]"
Если возникает другая ошибка ввода-вывода, выведите: "ERROR: Could not read the file: [error message]"
Всегда выводите "File operation completed." в блоке finally, независимо от того, произошло исключение или нет.
Попробуйте сами
using System;
using System.IO;
class Program
{
public static void ProcessData(string filename)
{
// Напишите свой код здесь
}
static void Main(string[] args)
{
string filename = Console.ReadLine();
ProcessData(filename);
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Многомерные массивы
Основы 2D-массивовОбъявление и инициализация 2D-массивовДоступ к элементам 2D-массиваВложенные циклы с 2D-массивамиЗубчатые массивыОсновные операции с матрицамиПовторение — многомерные массивы4Методы управления потоком выполнения
Досрочный выходЗащитные условияОператоры перехода (goto)Break и ContinueУпрощение вложенных условных конструкций7Логические операторы: продвинутый уровень
Вычисление с коротким замыканиемУсловные логические операторыПриоритет операторовПовторение — продвинутые операторы2Продвинутое принятие решений
Множественные условияСложная логика BooleanСравнение If и SwitchВложенные конструкции SwitchПовторение — продвинутые решения5Обработка исключений
Основы Try-CatchТипы исключенийНесколько блоков CatchРабота с файламиБлок FinallyИспользование Using вместо Try-FinallyПользовательские исключенияПовторение — обработка ошибок3Улучшение циклов
Производительность цикловИтерация по сложным структурамКаждый тип циклаРефакторинг цикловПовторение — оптимизированные циклы6Обработка null
Основы ссылок на nullТипы значений, допускающие nullШаблоны проверки на nullЗащитное программированиеПовторение — безопасность при работе с nullПотренируйтесь самостоятельно: Онлайн-компилятор C#