Взято из: здесь
Возбуждение и отлов исключений не должны происходить обычно как часть успешного выполнения метода. При разработке библиотек классов клиентскому коду должна быть предоставлена возможность проверить состояние ошибки, прежде чем предпринимать операцию, которая может привести к возникновению исключения. Например, System.IO.FileStream предоставляет свойство CanRead, которое можно проверить перед вызовом метода Read, предотвращая возникновение потенциального исключения, как показано в следующем фрагменте кода:
Dim str As Stream = GetStream ()
Если (str.CanRead), то
код для чтения потока
Конец, если
Решение о том, проверять ли состояние объекта до вызова конкретного метода, который может вызвать исключение, зависит от ожидаемого состояния объекта. Если объект FileStream создается с использованием существующего пути к файлу и конструктора, который должен возвращать файл в режиме чтения, проверка свойства CanRead не требуется; невозможность чтения FileStream будет нарушением ожидаемого поведения выполненных вызовов методов, и должно возникнуть исключение. Напротив, если метод задокументирован как возвращающий ссылку FileStream, которая может или не может быть читаемой, рекомендуется проверить свойство CanRead перед попыткой чтения данных.
Чтобы проиллюстрировать влияние на производительность, которое может вызвать использование метода кодирования «выполнение до исключения», производительность приведения, который выдает InvalidCastException в случае сбоя, сравнивается с оператором C # as, который возвращает нули, если приведение выходит из строя. Выполнение этих двух приемов одинаково для случая, когда приведение является действительным (см. Тест 8.05), но для случая, когда приведение является недействительным, и использование преобразования приводит к исключению, использование преобразования в 600 раз медленнее, чем использование как оператор (см. Тест 8.06). Высокопроизводительное влияние метода выброса исключений включает в себя стоимость выделения, выброса и перехвата исключения, а также стоимость последующей сборки мусора объекта исключения, что означает, что мгновенное воздействие выброса исключения не столь велико. Поскольку выдается больше исключений, частая сборка мусора становится проблемой, поэтому общее влияние частого использования метода кодирования, генерирующего исключения, будет аналогично тесту 8.05.