在构造函数中抛出ArgumentNullException?

对于具有单个参数的构造函数,如果参数为null / empty,那么在构造函数中抛出ArgumentNullException是否可以? 或者,是否应该在实际使用该方法的方法中抛出? 谢谢。

是的,如果这是完全必要的,那就抛出exception。 你不应该在以后抛出exception。

永远记住“失败早期原则” 。 现在的概念正在失败,所以你不要浪费时间去debugging或者遇到意想不到的系统function。

或者,您也可以为“”和ArgumentNullException为null引发ArgumentException。 在这两种情况下,请确保您抛出一个有效的exception消息。


总是一个很好的参考文章来pipe理exception: 良好的exceptionpipe理规则的拇指


关于@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"); 

把它扔在构造函数中是没有问题的 – 在.NET框架中有几个类可以做到这一点。 此外,请检查代码合同 。

从听起来像,你传入一个参数到构造函数由该类举行在稍后的其他方法中使用。 如果你实际上并没有在构造函数中使用这个参数,那么你应该考虑把参数移动到实际使用它的方法的参数上。

我将把这个检查放在你调用构造函数时设置的属性中…那样的话,在所有情况下都会抛出exception。