Представьте, что у вас есть метод со следующей подписью:
public void DoSomething(Guid id)
Если Guid.Emtpy
представляет недопустимое значение, какой тип исключения будет наиболее подходящим? ArgumentException или ArgumentOutOfRangeException?
Я слегка склоняюсь к ArgumentException, так как не думаю, что все Guids, кроме Guid.Empty - это большой диапазон - это слишком много для включения: есть только один исключенный член.
Однако я никоим образом не уверен, что так и должно быть, поэтому я хотел бы услышать, может ли кто-нибудь предоставить аргументы для того или другого?
Я хорошо знаю, что это в основном семантическое обсуждение, но в интересах хорошего дизайна API, я все же хотел бы знать, есть ли ясные случаи для того или иного варианта.