我有一个包含项目集合的类。为了方便起见,我提供了由
实现的 GetCurrentItempublic Type GetCurrentItem
{
get { return this.items[this.items.Count - 1]; }
}
如果列表中没有项目,将抛出异常。
我应该抛出异常还是返回null
?如果这是我交给你的 API,你会期待什么?异常还是空?有没有更好的方法来处理这个问题?
最佳答案
至于哪个更正确?正如柯克的评论所暗示的那样:这取决于。有时 null
合乎逻辑,有时如果没有合理的默认值,则异常更适合。我尝试做的一件事是考虑“调用 GetCurrentItem
是逻辑错误还是安全的事情?”
如果调用GetCurrentItem
失败如果没有,则抛出异常是正确的做法。例如,如果您的收藏有 HasCurrent
或 IsEmpty
有人可以在调用 GetCurrentItem
之前检查结果的属性,那么他们应该“知道得更好”。但是如果当前项是null
是使用您的类(class)的正确逻辑方式,那么一定要以这种方式设计它。无论哪种方式,我都会在代码注释中记录行为,让用户知道预期的行为。
虽然我会这么说,公开ArgumentOutOfRange
异常可能会泄露实现细节。也就是说,如果此类的用户不知道内部结构是数组或 List<T>
,然后不要泄露该异常,而是捕获它、包装它并抛出一个更有意义的异常(自定义,或类似 InvalidOperationException
的东西)。
因为他们并没有真正直接传递参数,所以他们得到一个 ArgumentOutOfRange
异常可能令人困惑 :-)
关于c# - 创建可能抛出 IndexOutOfRangeException 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11160883/