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