Использование обработчиков исключений с пользовательской фильтрацией
Обновлен: Ноябрь 2007
В настоящее время 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
Основные понятия
Лучшие методики обработки исключений