Какое наиболее подходящее исключение выдается, когда аргументы конфликтуют друг с другом? - PullRequest
2 голосов
/ 15 сентября 2011

Извините, если раньше об этом спрашивали, но я не смог найти похожий вопрос.

У меня есть объект, который представляет запрос и спецификацию заказа для результатов. Я хотел бы, чтобы семантика заключалась в том, что вы можете указывать значение NULL для запроса (т.е. возвращать все результаты), что вы можете указывать NULL для порядка (т.е. возвращать результаты в любом порядке), но вы не можете указать NULL для обоих (потому что тогда почему Вы используете механизм запросов ...)

Итак, ArgumentException, ArgumentNullException и ArgumentOutOfRangeException не показались правильными, потому что это не один аргумент - и все их комментарии к документу ссылаются на единственное число.

Есть указатели?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 15 сентября 2011

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

Если это будет вызвано пользовательским интерфейсом или каким-либо другим процессом, вам не нужно нажимать исключение, так как будет лучше проверить ввод.Если вы выполняете проверку ввода внутри метода, то, возможно, рассмотрите пользовательский InvalidInputException, опять же с сообщением (я не собираюсь начинать дискуссию «Являются ли ошибки ввода исключениями?» ...).

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

1 голос
/ 15 сентября 2011

В .NET Framework есть прецеденты для ситуации, когда проверка зависит от значения более одного аргумента.

Например, ArrayList.CopyTo(int index, Array array, int arrayIndex, int count).

В этом случае, если (index + count) больше, чем размер ArrayList, выдается ArgumentException с использованием перегрузки конструктора ArgumentException, который не принимает аргумент parameterName.

Это похоже на вашу ситуацию.

1 голос
/ 15 сентября 2011

Я думаю, что NotSupportedException описал бы, что вы получаете на

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