Должен ли я обрабатывать / ловить эти исключения? - PullRequest
1 голос
/ 18 июля 2011

Следующие исключения, вероятно, очень похожи:

  • ArgumentException
  • ArgumentNullException
  • InvalidOperationException
  • ObjectDisposedException.

    1. Должен ли я добавить их в свой код?
    2. Должен ли я их поймать?
    3. InvalidOperationException - очень расплывчатое и широкое исключение, так какозначает, что метод пытается выполнить что-то, что невозможно из-за состояния (например, запустить win svc, который не может быть запущен).

Ответы [ 3 ]

2 голосов
/ 18 июля 2011

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

Так, например,

  • Бросать ArgumnetNullException, когда аргумент равен нулю Бросить
  • Исключение ArgumentOutofRange, когда аргумент находится вне диапазона
  • ArgumentException - аргумент недействителен по какой-то другой причине.

InvalidOperationException является довольно широким и часто используется как ловушка, когда более конкретные параметры не подходят.

1 голос
/ 18 июля 2011

Большинство самодельных валидаторов параметров метода (часто называемых как Guard, Arguments и т. Д.) Выдают эти исключения в случае недопустимых аргументов:

  • ArgumentException - когда параметр метода неправильный
  • ArgumentNullException - когда параметр метода имеет значение null

Я полагаю, что в MSDN есть довольно подробное описание того, когда выдавать такие исключения,

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

ArgumentNullException генерируется, когда вызывается метод и хотя бы один из переданные аргументы являются нулевыми, но никогда не должны быть нулевыми.

InvalidOperationException используется в случаях, когда не удается вызвать метод вызван причинами, отличными от неверных аргументов За Например, InvalidOperationException вызывается:

  • MoveNext, если объекты коллекции изменяются после Перечислитель создан.
  • GetString, если набор ресурсов закрыт до вызова метода сделал.
1 голос
/ 18 июля 2011

Все зависит от того, что вы делаете. За исключением ObjectDisposedException, который вы должны оставить во время выполнения, все они допустимы в соответствующих ситуациях.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...