C# try-catch: Обработка исключений в программировании

Обработка исключений — механизм, позволяющий программе реагировать на непредвиденные события во время выполнения. Оператор try-catch позволяет программе «поймать» и обработать исключение, предотвращая аварийное завершение.

Типичные исключения

Примеры событий, приводящих к исключениям:

  • Деление на ноль.
  • Некорректное преобразование типов данных.
  • Попытка открыть несуществующий файл.
  • Доступ к элементу массива за его пределами.
  • Другие ошибки во время выполнения программы.

Практическое применение try-catch

Оператор try-catch — базовый механизм обработки исключений в C#. Конструкция try содержит код, потенциально вызывающий исключение. Возникновение исключения передаёт управление блоку catch, где оно обрабатывается.

int num;
int result;

Console.WriteLine("Введите число:");
try
{
    num = Convert.ToInt32(Console.ReadLine());
    result = num * 2; // Пример кода, который может вызвать исключение
    Console.WriteLine(result);
}
catch (FormatException)
{
    Console.WriteLine("Ошибка: Неверный формат ввода. Введите число.");
}

Если пользователь введёт не число, а символ, возникнет исключение FormatException. Блок catch перехватит его и выведет сообщение об ошибке. При корректном вводе, код в блоке try выполнится без ошибок.

Типы исключений и их обработка

Существуют различные типы исключений, соответствующие определённым ошибкам:

  • Exception: Базовый класс для всех исключений. catch (Exception) перехватит любое исключение.
  • FormatException: Исключение при некорректном преобразовании типов.
  • DivideByZeroException: Исключение при попытке деления на ноль.
  • FileNotFoundException: Исключение при попытке открыть несуществующий файл.
  • IndexOutOfRangeException: Исключение при доступе к элементу массива за его пределами.

Использование нескольких блоков catch позволяет обрабатывать различные типы исключений:

try
{
    // ... код ...
}
catch (FormatException ex)
{
    Console.WriteLine("Ошибка формата: " + ex.Message);
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("Деление на ноль: " + ex.Message);
}
catch (Exception ex)
{
    Console.WriteLine("Произошла ошибка: " + ex.Message);
}

Этот код обрабатывает FormatException, DivideByZeroException и любые другие исключения.

Блок finally

Блок finally содержит код, выполняющийся всегда, независимо от возникновения исключения:

try
{
    // ... код ...
}
catch (Exception ex)
{
    // ... обработка исключения ...
}
finally
{
    Console.WriteLine("Блок finally всегда выполняется.");
}

Это полезно для освобождения ресурсов (например, закрытия файлов или соединения с базой данных). Даже return в блоке try не предотвратит выполнение кода в finally.

Оператор try-catch — мощный инструмент для обработки исключений и повышения надёжности программ. Использование различных типов исключений и блоков catch и finally позволяет создавать более устойчивые к ошибкам приложения.

Что будем искать? Например,программа