Поймать наиболее полученные исключения?

В.NET, при ловле исключений, я должен всегда ловить полученные исключения (так не ArgumentException, но производные типы)?

Также:

Если бы меня просят использовать коды ошибок, это было бы в конструкторе как так?:

выдайте новое Исключение ("4000", исключая);

Или пользовательский тип исключительной ситуации с errorcode свойством? (Это может стать сбивающим с толку с типами исключительной ситуации как SqlException, которые имеют коды ошибок, отображающиеся на ошибки SQL Server).

Спасибо

6
задан GurdeepS 21 June 2010 в 16:38
поделиться

2 ответа

  1. Перехватывает самое широкое исключение, которое вы умеете обрабатывать.

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

  2. Если вас просят использовать коды ошибок, вы можете обойтись без использования свойства сообщения исключения для его обертывания, но я бы никогда не стал использовать это как причину, чтобы не генерировать правильно типизированное исключение. Это потому, что здесь есть две отдельные проблемы:

    a. Код ошибки предназначен для предоставления конкретной информации, которую можно найти в случае сбоя в поле.Его никогда не следует использовать для программного различения типов исключений, т.к. в языке есть специальные средства, предназначенные для этого: типы исключений.

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

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

6
ответ дан 16 December 2019 в 21:34
поделиться

Это зависит от того, хотите ли вы перехватить конкретное исключение или группу исключений разных типов.

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

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

2
ответ дан 16 December 2019 в 21:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: