我总是听到那些说定居者和吸气者应该快速not throw exceptions的人。
现在,如果是,如果没有抛出异常,我应该如何处理传递给setter的无效值?
答案 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中引发异常的一些问题。
但通常没有那么多可以导致异常,除了开发过程中的问题(预先使用的对象为空?)。
验证问题不应该是例外。例外情况应该是非常不寻常的情况(如预期的文件不存在,内存不足)。输入验证和检查用户输入的文件是否存在不应该例外。