Для конструктора с единственным параметром, нормально ли вызывать ArgumentNullException внутри конструктора, если параметр имеет значение null/empty? ИЛИ, должен ли он быть брошен в методе, который фактически использует аргумент? Спасибо.
Выбрасывание ArgumentNullException в конструкторе?
Ответ 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
Я бы поместил чек в свойство, которое вы устанавливаете при вызове конструктора... Таким образом, исключение будет выбрано во всех случаях.