Главная » C# » Фильтрация исключений в Visual C# (Sharp)

0

Во  всех  приведенных  примерах  исключений   в  операторе    catch применялся  тип

Exception:

catch (ExcepNullReferenceExceptiontion) { ;}

Данный  тип  перехватывает  все  исключения.

На рис. 5.3 среда IDE перехватила исключение, применяя специальный тип NuiiReferenceException. Использование этого типа в операторе catch ограничает  перехват  исключений  исключениями  обращения  к  null-данным.

Указывая специальный тип  исключения,  можно  отфильтровать  исключения,  котые мы хотим перехватывать. Например, тип NotSupportedException перехватает только экземпляры исключений NotSupportedException. Далее приводится пример  использования  этого  типа:

try {

throw new NotSupportedException("There is no code");

}

catch (NotSupportedException ex) {

}

В предыдущем коде, если код в блоке tr y выдаст экземпляр исключения типа Exception, то блок catch не будет активирован, т. к. он настроен  на перехват толо  исключений  определенного  типа.

Типы исключений можно комбинировать, чтобы отфильтровать специфические исключения. Специальный тип исключения  должен  быть  первым  исключением  пле блока   try:

try {

П     …

}

catch (NotSupportedException ex) {

}

catch (Exception ex) {

}

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

возможносте й      фильтровани я      блок а      catch  дл я      перехват а      исключени й     тип а

NotsupportedException нужн о  был о  б ы   применит ь  следующи й   код :

try {

throw new NotsupportedException("There is no code");

}

catch (Exception ex) {

if (ex is NotsupportedException) {

11     . . .

}

else {

throw ex;

}

}

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

Таблица       5.1.        Наиболее       распространенные         типы         исключений

Исключение

Описание

Exception

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

ArgumentException

Генерируется  при  вызове  метода  с недействителым  аргументом.  Обычно точную  причину можно уать в свойстве Message. Причиной этого исключия  является  непрааильное  содержимое  аргумента

Argumen tNu11Exc ер t i on

Генерируется  при  вызове  метода  с null-аргументом. Причиной  может быть  передача  null-значения  моду или null-значение одного  из аргументов

ArgumentOutOfRangeException

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

ArithmeticException

Генерируется  при  возникновении  арифметической ошибки

Обработка       исключений      в       С#                                                                                                                                             153

Таблица     5.1      (окончание)

Исключени е

Описани е

DivideByZeroException

Генерируется при попытке деления на ноль

FormatExcept ion

Генерируется при неправильном формате парамеа. Например, если метод ожидает число, отформированное точкой, а используется запятая

IndexOutOfRangeException

Генерируется при попытке обратиться к элементу массива вне пределов массива. Например, при пытке обратиться к массиву, который не был выден, или при попытке обратиться к элементу массива с отрицательным индексом

InsufficientMemoryException

Генерируется при недостаточном объеме памяти. Хотя это исключение встречается нечасто, оно может возникнуть при попытке выделить массив размером порядка 5 триллионов элементов (что может случитя, если переменной, указывающей размер массива, не было присвоено правильное значение)

InvalideastException

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

No t Imp 1 emen t edExc ep t i on

Генерируется при попытке использования методов или свойств, которые не были реализованы. Часто у вас не будет времени реализовать аесь код класса за один раз. В таких случаях не оставляйте нереализованных свойста или методов, а выбросите вместо них исключение. Таким образом, вы будете знать, не забыли ли вы реализовать что-то

NotSupportedException

Генерируется при попытке использования экземпла интерфейса и метода, неприменимого в данной ситуации. Например, при попытке записи в открытый буфер чтения/записи привода CD-ROM только для чтения. Попытка чтения из экземпляра интерфейса исключения не аызывает

NullReferenceException

Генерируется при попытке вызова метода или свотва переменной, которой не был присвоен действельный экземпляр типа

OutOfMemoryException

Подобно   InsufficientMemoryException

Over f1owExc ep t i on

Генерируется при попытке выполнения неподдержаемых операций с числами, например сложение 2 миллиарда и 2 миллиарда при помощи 32-битового целого числа

SystemException

Генерируется операционной системой. Создавать производные классы из этого класса нельзя

Источник: Гросс  К. С# 2008:  Пер. с англ. — СПб.:  БХВ-Петербург, 2009. — 576 е.:  ил. — (Самоучитель)

По теме:

  • Комментарии