Подтвердить что ты не робот

Выбрасывание ArgumentNullException в конструкторе?

Для конструктора с единственным параметром, нормально ли вызывать ArgumentNullException внутри конструктора, если параметр имеет значение null/empty? ИЛИ, должен ли он быть брошен в методе, который фактически использует аргумент? Спасибо.

4b9b3361

Ответ 1

Да, если это совершенно необходимо, то выбросьте исключение. Вы не должны * бросать исключение позже.

Всегда помните "Fail Early Principle" . Концепция теперь не работает, поэтому вы не тратите время на отладку или не испытываете неожиданных системных функций.

В качестве альтернативы вы также можете вывести ArgumentException для "" и ArgumentNullException для null. В любом случае убедитесь, что вы выбрали действительное сообщение об исключении.


Всегда хорошая справочная статья для управления исключениями: Хорошие правила управления исключениями большого пальца


Боковое примечание о том, что сказал @Steve Michelotti (потому что я большой поклонник CodeContracts)

Contract.Requires<ArgumentNullException>(inputParemeter!= null, "inputparameter cannot be null");
Contract.Requires<ArgumentException>(inputParemeter!= "", "inputparameter cannot be empty string");

в качестве альтернативы

Contract.Requires<ArgumentNullException>(!string.IsNullOrEmpty(inputParemeter), "inputparameter cannot be null or empty string");

Ответ 2

Бросить его в конструкторе в порядке - в .NET Framework есть несколько классов. Кроме того, ознакомьтесь с кодовыми контрактами для этого.

Ответ 3

Из того, что это звучит, вы передаете параметр в конструктор, который будет удерживаться классом для использования в другом методе позже. Если вы фактически не используете аргумент в конструкторе, вы, вероятно, должны подумать о том, чтобы переносить аргумент как параметр метода, который на самом деле его использует.

Ответ 4

Я бы поместил чек в свойство, которое вы устанавливаете при вызове конструктора... Таким образом, исключение будет выбрано во всех случаях.