2013-07-23 4 views
0

просто ищет советы здесь ради лучших практик.Выбрасывает ArgumentOutOfRangeException правильно делать?

У меня есть логический метод, который проверяет определенное условие для каждого элемента массива. Параметр массива не может быть нулевым и не содержит нулевых значений, иначе было бы бессмысленно возвращать true или false.

Best practices указывает, что в случае передачи недопустимого аргумента методу должно быть выбрано ArgumentException (или производное). Метод будет генерировать ArgumentNullException, если параметр массива равен NULL. Тем не менее, я не уверен в том, что я должен использовать для пустого массива или массива, который содержит нулевые значения.

Моя первоначальная мысль заключалась в том, чтобы выбросить простое аргумент ArgumentException с сообщением, объясняющим характер проблемы, но коллега предположил, что вместо этого я вместо этого создаю исключение ArgumentOutOfRangeException.

Обычно я думаю об ArgumentOutOfRangeException как о чем-то, что говорит «слишком высоко» или «слишком низко». Мой коллега, кажется, считает, что он может также стоять за «недостаточно» и «что-то не хватает».

Правильно ли он? Или я должен следовать своей первой идее и бросать ArgumentException?

+0

Argument null - это только и только это. Пустой массив или массив с нулевыми значениями - это не пустой аргумент. – Paparazzi

+0

Ни в моем. Вот почему я бросаю ArgumentNullException ТОЛЬКО, если сам массив является нулевым значением. Вопрос в том, что я должен делать, когда массив НЕ имеет значение null, но все еще недействителен. – Crono

+0

Если массив НЕ имеет значение null и недействителен, то как это не исключение ArgumentOutOfRangeException? – Paparazzi

ответ

1

MSDN утверждает, что вы должны бросить ArgumentOutOfRangeException для случаев, когда аргументы НЕ равны нулю. Так что это не подходящий тип исключения, который нужно бросить здесь.

Вы упомянули, что вы также хотите проверить, что массив пуст. Если вы это сделаете, то бросать ArgumentNullException тоже не подходит.

Это дает вам исключение ArgumentException.

+0

Я не уверен, что понимаю ваш первый абзац. Если, действительно, ArgumentOutOfRangeException для случаев, когда аргументы НЕ являются нулевыми, то не делает ли это правильным типом исключения, чтобы вызвать сценарий, где параметр массива не является нулевым, но содержит недопустимые значения? – Crono

+0

В первом абзаце я рассказывал о ситуации, когда один из элементов массива имеет значение NULL. То, как я понял ваш вопрос, состоит в том, что вы хотите иметь одну проверку, чтобы проверить, является ли paramater нулевым и генерирует исключение ArgumentNullException. Затем вы должны проверить, являются ли какие-либо элементы null или string.empty и выбрасывают другое исключение для этих случаев. Для меня имеет смысл бросать общее ArgumentException, поскольку оба аргумента ArgumentNullException и ArgumentOutOfRangeException не являются подходящими типами для броска в обоих случаях. –

+1

Также, даже если нулевой чек не был там, я думаю, что бросание ArgumentOutOfRangeException для пустой строки в неправильном порядке. Он предполагает, что существует ряд значений, с которыми вы проверяете, где вы фактически проверяете одно значение. Я быстро проверил сборки .net: System.Net.Mail.MailAddress mailaddress = new System.Net.Mail.MailAddress ("") выкидывает ArgumentException. –