如何处理setter中的无效值?

时间:2016-07-07 08:05:42

标签: c#

我总是听到那些说定居者和吸气者应该快速not throw exceptions的人。

现在,如果是,如果没有抛出异常,我应该如何处理传递给setter的无效值?

2 个答案:

答案 0 :(得分:5)

根据MSDN

  

避免从属性getter中抛出异常。

     

属性getter应该是简单的操作,不应该有任何操作   前提条件。如果一个getter可以抛出异常,它应该可能   被重新设计成一种方法。请注意,此规则不适用于   索引器,我们确实期望通过验证的例外情况   参数。

话虽如此,对我来说,从setter抛出异常是绝对正常的,通常getters永远不会抛出异常。

将属性视为对象的属性或特征。因此,当你获得该属性的价值时,你应该得到的是没有任何例外。你也希望这样,没有人能够为它设置无效值,所以在设置值时抛出异常是可以的。

同样作为一种好的做法,如果属性设置器抛出异常会保留以前的值。以便保持对象的完整性。 MSDN

你可以在这里找到一些好的讨论 - https://softwareengineering.stackexchange.com/questions/16646/is-throwing-an-exception-from-a-property-bad-form

答案 1 :(得分:0)

实际上,我认为主要是因为构造函数不会抛出异常。

对于getter / setter,问题是绑定(如WPF)可能会导致在getter / setter中引发异常的一些问题。

但通常没有那么多可以导致异常,除了开发过程中的问题(预先使用的对象为空?)。

验证问题不应该是例外。例外情况应该是非常不寻常的情况(如预期的文件不存在,内存不足)。输入验证和检查用户输入的文件是否存在不应该例外。