【发布时间】:2011-04-07 11:43:58
【问题描述】:
对于具有单个参数的构造函数,如果参数为空/空,是否可以在构造函数内部抛出 ArgumentNullException?或者,是否应该在实际使用参数的方法中抛出它?谢谢。
【问题讨论】:
标签: c# exception constructor null arguments
对于具有单个参数的构造函数,如果参数为空/空,是否可以在构造函数内部抛出 ArgumentNullException?或者,是否应该在实际使用参数的方法中抛出它?谢谢。
【问题讨论】:
标签: c# exception constructor null arguments
是的,如果它是完全必要的,那么抛出异常。你不应该*稍后抛出异常。
永远记住"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");
【讨论】:
在构造函数中抛出它是好的 - .NET 框架中有几个类可以做到这一点。此外,请查看 code contracts 了解此内容。
【讨论】:
听起来,你将一个参数传递给构造函数,由类保存,以便稍后在其他方法中使用。如果您实际上没有在构造函数中使用参数,您可能应该考虑将参数移动为实际使用它的方法的参数。
【讨论】:
我会检查你在调用构造函数时设置的属性...这样在所有情况下都会抛出异常。
【讨论】: