在构造函数中抛出ArgumentNullException?

时间:2010-09-02 18:03:29

标签: c# exception constructor null arguments

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

4 个答案:

答案 0 :(得分:53)

是的,如果它是完全必要的,那么抛出异常。你不应该在以后抛出异常。

永远记住"Fail Early Principle"。概念现在失败,因此您不必浪费时间调试或体验意外的系统功能。

或者你也可以为“”抛出ArgumentException,为null抛出ArgumentNullException。在任何一种情况下,请确保抛出有效的异常消息。


始终是管理例外的好参考文章:Good Exception Management Rules of Thumb


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

答案 1 :(得分:17)

在构造函数中抛出它很好 - 在.NET框架中有几个类可以执行此操作。另外,请查看code contracts

答案 2 :(得分:4)

从它的声音来看,你将一个参数传递给类所持有的构造函数,以便稍后在其他方法中使用。如果你实际上没有在构造函数中使用参数,你应该考虑将参数移动为实际使用它的方法的参数。

答案 3 :(得分:1)

我会在调用构造函数时将检查放入您设置的属性中......这样就会在所有情况下抛出异常。