Использование обработчиков исключений с пользовательской фильтрацией

В настоящее время Visual Basic поддерживает исключения с пользовательской фильтрацией. Обработчики с пользовательской фильтрацией перехватывают и обрабатывают исключения на основе требований к исключению, определяемых пользователем. Эти обработчики используют оператор Catch с ключевым словом When.

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

В следующем примере на Visual Basic показано применение оператора Catch/When.

Try
      'Try statements.
   Catch When Err = VBErr_ClassLoadException
      'Catch statements.
End Try

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

Комбинация конкретного исключения и отфильтрованных пользователем условий

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

В следующем примере на языке Visual Basic демонстрируется определенное исключение ClassLoadException в операторе Catch, а также предложение для пользовательской фильтрации с использованием ключевого слова When.

Try
      'Try statements.
   Catch cle As ClassLoadException When cle.IsRecoverable()
      'Catch statements.
End Try

См. также

Задачи

Практическое руководство. Использование пробного блока и блока перехвата для перехвата исключений

Практическое руководство. Использование определенных исключений в блоке Catch

Основные понятия

Лучшие методики обработки исключений

Другие ресурсы

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