我有一个包含项目集合的类.为方便起见,我提供了由实现的GetCurrentItem
public Type GetCurrentItem
{
get { return this.items[this.items.Count - 1]; }
}
Run Code Online (Sandbox Code Playgroud)
如果列表中没有项目,则会抛出异常.
我应该抛出异常还是应该归还null?如果这是我递给你的API,你会期待什么?例外还是null?有没有更好的方法来处理这个?
至于哪个更正确?正如柯克的评论所暗示的那样:这取决于.有时a具有null逻辑意义,如果没有默认值是合理的,有时异常更适合.我尝试做的一件事是想到"是在称GetCurrentItem逻辑失败还是安全?"
如果没有时调用失败GetCurrentItem,则抛出异常是正确的过程.例如,如果您的集合有一个HasCurrent或IsEmpty属性,有人可以在调用之前检查结果GetCurrentItem,那么他们应该"知道更好".但是,如果当前项目是null使用您的类的正确逻辑方式,那么无论如何都要设计它.无论哪种方式,我都会记录代码注释中的行为,以便让用户知道预期的行为.
我会这样说,暴露ArgumentOutOfRange异常可能会泄漏实现细节.也就是说,如果这个类的用户不知道内部结构是一个数组或者List<T>,那么不要将该异常流出,而是抓住它,包装它,并抛出一个更有意义的(自定义或类似的东西InvalidOperationException) .
由于他们并没有真正直接传递参数,他们获得ArgumentOutOfRange异常可能会令人困惑:-)
| 归档时间: |
|
| 查看次数: |
331 次 |
| 最近记录: |