Если вы пишете библиотеку BigInteger, то вам совершенно необходимо бросить соответствующий DivideByZero
исключение. Если вы пишете библиотеку корзины покупок, тогда ... ну, возможно, нет.
В настоящий момент я не могу придумать вескую причину, чтобы бросить NullReferenceException
. Если вы создаете API с документацией, в которой говорится: «Первый параметр для HummingBirdFeeder.OpenSugarWaterDispenser(Dispenser dispenser, int flowRate)
- это раздатчик сахарной воды, который вы хотите открыть». И если кто-то тогда приходит и передает нулевое значение этому методу, тогда вы должны обязательно бросить ArgumentNullException
.
Сдача NullReferenceException
из вашего API будет просто ленивой, хотя, потому что это неправильно, и это утечки некоторых ваших внутренних компонентов.
отредактирован ADD:
Теперь, когда вы изменили вопрос сослаться на ArgumentNullException
, то ответ прост: да, вы определенно должны бросить такого рода исключения при таких обстоятельствах:
- You пишут общедоступный метод.
- Получение нулевого значения для аргумента является некорректным (т. Е. Метод не имеет смысла без этого конкретного аргумента).
- Документация для метода указывает, что пустые значения не допускаются.
В этом случае первым, что должен сделать ваш метод, является проверка нулевого значения и выдача исключения, если условие нарушено.
Если вы пишете частный или внутренний метод, то в большинстве случаев вам не нужно будет проверять параметры во время выполнения в сборке выпуска. Вы можете убедиться, что ваш собственный код правильно называет ваш собственный код. Одна вещь, которая помогает создать такую уверенность, чтобы проверить параметры в отладочных путем добавления assersions:
Debug.Assert(dispenser != null);
Таким образом, вы можете убедиться в том, что код поступает правильно и поймать любые ошибки раньше, не замедляя освобожденного код с кучей бесполезных избыточных чеков.
Кодовые контракты могут облегчить эту проблему. –
Примечание: ответы Juhar и nobugz оба очень хороши. – Armstrongest