Поделиться через


Обработка и выбрасывание исключений в .NET

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

Исключения

Исключением является любое условие ошибки или непредвиденное поведение, обнаруженное исполняемой программой. Исключения могут возникать из-за сбоя в коде или в коде, который вызывается (например, общая библиотека), недоступных ресурсов операционной системы, непредвиденных условий, с которыми сталкивается среда выполнения (например, код, который не может быть проверен) и т. д. Приложение может восстановиться после некоторых из этих ситуаций, но не от других. Хотя вы можете восстановить из большинства исключений приложений, вы не можете восстановить из большинства исключений среды выполнения.

В .NET исключение — это объект, наследуемый от System.Exception класса. Исключение генерируется из блока кода, в котором возникла проблема. Исключение передается в стек до тех пор, пока приложение не обработает его или программа завершит работу.

Исключения и традиционные методы обработки ошибок

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

  • Создание и обработка исключений работает одинаково для языков программирования .NET.

  • Не требуется какой-либо синтаксис языка для обработки исключений, но позволяет каждому языку определять собственный синтаксис.

  • Исключения можно создавать в пределах процесса и даже границы компьютера.

  • Код обработки исключений можно добавить в приложение для повышения надежности программы.

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

Распространенные исключения

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

Тип исключения Описание Пример
Exception Базовый класс для всех исключений. Нет (используйте производный класс этого исключения).
IndexOutOfRangeException Создается средой выполнения только в том случае, если массив индексируется неправильно. Индексирование массива за пределами допустимого диапазона:
arr[arr.Length+1]
NullReferenceException Создается средой выполнения только при ссылке на пустой объект. object o = null;
o.ToString();
InvalidOperationException Выбрасывается методами, когда в недопустимом состоянии. Вызов Enumerator.MoveNext() после удаления элемента из базовой коллекции.
ArgumentException Базовый класс для всех исключений аргументов. Нет (используйте производный класс этого исключения).
ArgumentNullException Вызывается методами, которые не позволяют аргументу иметь значение NULL. String s = null;
"Calculate".IndexOf(s);
ArgumentOutOfRangeException Вызывается методами, которые проверяют, находятся ли аргументы в заданном диапазоне. String s = "string";
s.Substring(s.Length+1);

См. также