对于具有单个参数的构造函数,如果参数为null/empty,那么在构造函数中抛出ArgumentNullException是否可以?或者,它应该在实际使用该参数的方法中抛出吗?谢谢。在构造函数中抛出ArgumentNullException?
回答
是的,如果它是完全必要的然后抛出异常。你以后不应该抛出异常。
永远记住"Fail Early Principle"。现在概念失败了,所以你不会浪费时间调试或者遇到意想不到的系统功能。
或者,您也可以为“”和ArgumentNullException为null引发ArgumentException。在任何一种情况下,请确保您抛出有效的异常消息。
始终用于管理例外一个很好的参考文章:Good Exception Management Rules of Thumb
旁注什么@Steve米凯洛蒂说(因为我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");
从听起来像是,你传入一个参数到构造函数由该类举行供稍后在其他方法中使用。如果实际上没有在构造函数中使用参数,则应该考虑将参数移动到实际上使用它的的参数。
我会尽我所能,但它是基于接口执行的一系列任务的一部分,所以我无法修改方法签名。 – 2010-09-02 18:08:23
在这种情况下,我同意其他人认为构造函数中的失败绝对是最好的选择。 – 2010-09-02 18:12:57
我会把这个检查放在您调用构造函数时设置的属性中......那样在所有情况下抛出异常。
没有迹象表明属性是由构造函数设置的。 – 2010-09-02 18:10:48
是的,但会被抓到?类操作通常包含在try块中,而不是创建类。 – Canacourse 2012-04-24 07:54:27
- 1. new []/delete []并在C++中抛出构造函数/析构函数
- 2. 从构造函数中抛出异常
- 3. NServiceBus在UnicastBus.IsInitializationMessage中抛出ArgumentNullException
- 4. DropDownListFor抛出ArgumentNullException
- 5. 抛出ArgumentNullException
- 6. ServerSocket的构造函数抛出异常
- 7. EJB3构造函数抛出异常?
- 8. Angular2,构造函数DI抛出异常
- 9. 从构造函数中抛出异常在C++中
- 10. Dijit构造函数抛出“调用链式构造函数”错误
- 11. 在C++类的构造函数中抛出异常
- 12. Facebook C#SDK抛出ArgumentNullException
- 13. Linq表达式抛出ArgumentNullException
- 14. 为什么EndGetResponse抛出ArgumentNullException?
- 15. C#Renci.SshNet.Sftp连接抛出ArgumentNullException
- 16. Activator.CreateInstance针对参数“类型”抛出ArgumentNullException
- 17. SevenZip.SevenZipExtractor构造函数在其他机器上抛出错误
- 18. 如何从枚举构造函数中抛出异常?
- 19. 如果我从构造函数中抛出异常,构造函数中的释放内存会发生什么?
- 20. JAXB为@XmlTransient字段抛出零参数构造函数错误
- 21. Fluent Nhibernate抛出异常FluentNHibernate.Automapping.IAutoClasslike ...缺少无参数构造函数
- 22. 角2参数传递到构造函数抛出异常DI
- 23. 到参数的构造函数显式调用抛出Error
- 24. 重定向表单托管bean构造函数抛出“java.lang.IllegalStateException”
- 25. System.ServiceModel.ServiceHost.AddServiceEndpoint构造函数导致异常抛出
- 26. 弹簧构造函数注入抛出错误
- 27. 抛出异常构造函数注入 - AutoFac依赖注入
- 28. 升压正则表达式异常从构造函数抛出* {
- 29. 构造函数可以抛出运行时异常吗?
- 30. YamlDotNet串行构造函数抛出异常
另一个好规则是“尽早失败”。特别是对于处理参数和参数,尽早失败检测错误,或尽可能接近发生错误时的时间点。 – 2010-09-02 18:12:04
你是对的!我一直在努力寻找正确原则的“名称”。 – Nix 2010-09-02 18:13:45