2010-09-02 72 views

回答

51

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

永远记住"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"); 
+5

另一个好规则是“尽早失败”。特别是对于处理参数和参数,尽早失败检测错误,或尽可能接近发生错误时的时间点。 – 2010-09-02 18:12:04

+0

你是对的!我一直在努力寻找正确原则的“名称”。 – Nix 2010-09-02 18:13:45

4

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

+1

我会尽我所能,但它是基于接口执行的一系列任务的一部分,所以我无法修改方法签名。 – 2010-09-02 18:08:23

+0

在这种情况下,我同意其他人认为构造函数中的失败绝对是最好的选择。 – 2010-09-02 18:12:57

17

在构造函数中抛出它很好 - 在.NET框架中有几个类可以实现这一点。此外,请查看code contracts

+2

代码合同+1。 – Nix 2010-09-02 18:18:19

1

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

+0

没有迹象表明属性是由构造函数设置的。 – 2010-09-02 18:10:48

+0

是的,但会被抓到?类操作通常包含在try块中,而不是创建类。 – Canacourse 2012-04-24 07:54:27

相关问题