Перехват двух исключений с помощью одной сети: освоение обработки исключений в C#

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

Метод 1: использование нескольких блоков перехвата
Самый простой и понятный подход — использовать несколько блоков перехвата, каждый из которых нацелен на определенный тип исключения. Давайте рассмотрим пример, в котором мы хотим перехватить как ArgumentNullException, так и ArgumentException:

try
{
    // Code that may throw ArgumentNullException or ArgumentException
}
catch (ArgumentNullException ex)
{
    // Handle ArgumentNullException
}
catch (ArgumentException ex)
{
    // Handle ArgumentException
}

Метод 2: перехват общего базового исключения
Если исключения, которые вы хотите перехватить, имеют общий базовый класс, вы можете перехватить базовое исключение, а затем проверить конкретный тип исключения с помощью условных операторов. Вот пример:

try
{
    // Code that may throw ArgumentNullException or ArgumentException
}
catch (Exception ex)
{
    if (ex is ArgumentNullException)
    {
        // Handle ArgumentNullException
    }
    else if (ex is ArgumentException)
    {
        // Handle ArgumentException
    }
}

Метод 3: использование предложения «When»
В C# 6.0 появилась новая функция, называемая предложением «When», которая позволяет добавлять условные операторы в блоки catch. Это позволяет указать дополнительные условия для перехвата конкретных исключений. Давайте посмотрим, как это работает:

try
{
    // Code that may throw ArgumentNullException or ArgumentException
}
catch (Exception ex) when (ex is ArgumentNullException || ex is ArgumentException)
{
    if (ex is ArgumentNullException)
    {
        // Handle ArgumentNullException
    }
    else if (ex is ArgumentException)
    {
        // Handle ArgumentException
    }
}

Метод 4: настраиваемая обработка исключений
В некоторых случаях вам может потребоваться определить собственные типы исключений для инкапсуляции различных сценариев ошибок. Перехватив базовый тип исключения, вы можете обрабатывать все пользовательские исключения, производные от него. Вот пример:

public class MyCustomException : Exception
{
    // Implement custom exception logic
}
try
{
    // Code that may throw MyCustomException or its derived types
}
catch (MyCustomException ex)
{
    // Handle MyCustomException
}

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