在开发类时(在C#中,但我认为这个问题在某种程度上与语言无关)处理属性之间依赖关系的正确方法是什么?
例如,我想创建一个属性B,其值以某种方式从属性A的值派生。属性B未定义,如果尚未设置属性A,则不应调用。如果没有设置A,在B的getter中抛出一个异常似乎不是一个优雅的处理方法。简单地从属性B返回一些默认值不是我想要做的事情。
一种方法是通过构造函数强制执行A的初始化,但是我们假设需要一个不带参数的默认构造函数,所以这不是一个选项。
答案 0 :(得分:2)
在这种情况下投掷InvalidOperationException
对我来说似乎完全正确:
InvalidOperationException
用于 无法调用时的情况 方法是由其他原因引起的 无效的参数
现在授予它谈论方法而不是属性,但我认为它仍然没问题。
如果你想要一个框架中的例子,IEnumerator.Current
被指定为抛出InvalidOperationException
,如果它在第一个元素之前或最后一个元素之后被调用。 (C#生成的迭代器实际上不这样做,但这是另一回事:)
这听起来好像是调用代码中的 bug 来执行此操作......他们正在不正确地使用该对象。指出错误的正确方法是抛出异常。