Должен Guid.Empty привести к ArgumentException или ArgumentOutOfRangeException - PullRequest
6 голосов
/ 22 июня 2009

Представьте, что у вас есть метод со следующей подписью:

public void DoSomething(Guid id)

Если Guid.Emtpy представляет недопустимое значение, какой тип исключения будет наиболее подходящим? ArgumentException или ArgumentOutOfRangeException?

Я слегка склоняюсь к ArgumentException, так как не думаю, что все Guids, кроме Guid.Empty - это большой диапазон - это слишком много для включения: есть только один исключенный член.

Однако я никоим образом не уверен, что так и должно быть, поэтому я хотел бы услышать, может ли кто-нибудь предоставить аргументы для того или другого?

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

Ответы [ 4 ]

7 голосов
/ 22 июня 2009

Я бы бросил ArgumentException. Его документы говорят:

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

это именно тот сценарий, который вы описываете. Вы хотите что-то вроде:

throw new ArgumentException("Guid.Empty is not a valid id", "id");
5 голосов
/ 22 июня 2009

Сказать, что пустое значение выходит за пределы диапазона, кажется неправильным. Поскольку Guid.Empty обычно используется, когда вообще не определено значение, на самом деле нет значения, которое может быть вне диапазона.

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

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

1 голос
/ 22 июня 2009

Бросить InvalidArgumentException. Это точно соответствует семантике, которую вы ищете. Вы бы не выбросили ArgumentOutOfRangeException, если бы ожидали uint и все значения, кроме 0xffffffff, действительны, не так ли?

0 голосов
/ 22 июня 2009

AE.

Каков именно допустимый диапазон направляющих, которого ожидает ваш метод?

CA72EE5A-5F26-11DE-BD28-13A156D89593 находится в допустимом диапазоне, но D58B3112-5F26-11DE-B0D2-5FA156D89593 не подходит?

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