Как генерировать исключения в C# (оператор throw)

На данный момент мы уже знаем то, как отлавливать и обрабатывать различные типы исключений в C#, а так же основные свойства класса Exception, который является базовым для всех типов исключений C#. Вместе с этим, иногда нам может потребоваться вызывать исключения самостоятельно вручную на какие-либо действия пользователя, чтобы не нарушать логику работы программы.  И сегодня мы познакомимся с тем, как можно генерировать исключения в C# с использованием оператора throw.

Пример генерации исключения в C#

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

    try
    {    
        Console.Write("Введите строку: ");
        string message = Console.ReadLine();
        if (message.Length > 3)
        {
            throw new Exception("Длина строки больше 3 символов");//генерируем исключение
        }
    }
    catch (Exception e)
    {
        Console.WriteLine($"Ошибка: {e.Message}");
    }

Здесь стоит обратить внимание на строку с генерацией исключения при помощи оператора throw, который работает следующим образом: после оператора throw указывается объект исключения (в данном случае, мы создали новый объект Exception), через конструктор которого мы передали пользователю сообщение об ошибке.

Само собой, вместо Exception мы можем использовать объект любого другого типа исключений, включая и с вой собственный (о том, как создавать собственные типы исключений мы ещё поговорим). Затем в блоке catch сгенерированное нами исключение будет обработано и пользователь увидит в консоли сообщение об ошибке.

Таким образом мы можем генерировать исключения в любом месте программы, где это нам необходимо.

При этом существует ещё одна форма использования оператора throw — без указания объекта исключения. В этом виде оператор throw может использоваться исключительно в блоке catch. Например:

try
{
    try
    {
        Console.Write("Введите строку: ");
        string message = Console.ReadLine();
        if (message.Length > 3)
        {
            throw new Exception("Длина строки больше 6 символов");//генерируем исключение
        }
    }
    catch
    {
        Console.WriteLine("Возникло исключение");
        throw; 
    }
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

В приведенном примере при вводе строки с длиной больше 3 символов будет сгенерировано исключение, которое будет обработано внутренним блоком catch, но так как в этом блоке catch используется оператор throw, то исключение будет передано дальше внешнему блоку catch.

Итого

Сегодня мы рассмотрели новый для нас оператор — throw, позволяющий генерировать собственные исключения в приложениях. Оператор throw может использоваться в двух вариантах — с указанием объекта исключения и без указания.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии