索引器是不是应该抛出异常[重复]
Posted
技术标签:
【中文标题】索引器是不是应该抛出异常[重复]【英文标题】:Should indexer throw exceptions [duplicate]索引器是否应该抛出异常[重复] 【发布时间】:2013-07-21 06:06:23 【问题描述】:假设我们有一个简单的 Person 类:
public Person this[int index]
get return (Person)arPeople[index];
set arPeople.Insert(index, value);
假设我有一个包含 N 个 Person 对象的数组。 如果我尝试访问不存在的索引(例如 N+1),我应该在这种情况下抛出异常还是返回 null?在这种情况下有哪些考虑?
提前致谢……
【问题讨论】:
访问超出范围的索引时arPeople
是什么意思?在大多数情况下,索引器在找不到索引时会抛出异常(请参阅Dictionary
、List
、...)。
Arrays 毫不犹豫地抛出IndexOutOfRangeException
,你为什么要这么做?
你们是对的人,阅读帖子,谢谢:)
我可以想到一个数据结构,你不会想要一个IndexOutOfRangeException
:一个环形缓冲区。例如:如果您尝试访问元素 0
、10
、20
等,则包含 10 个元素的环将返回第一个元素,如果您要求访问 1
、11
,则返回第二个元素, 21
,等等等等。它可能有用。不过,我不知道这样的数据结构是否存在,因为它很容易实现:ring[i % ring.Count]
@Nolonar,在这种情况下,索引 1521 处的元素存在。因此,没有理由返回 null 或抛出异常。
【参考方案1】:
嗯,这取决于什么是“预期”行为以及您是否可以从错误中恢复。在这种情况下,您将决定返回 null
是否是有效的返回值。大多数情况下,集合索引器应在索引无效时抛出ArgumentOutOfRangeException
。
【讨论】:
以上是关于索引器是不是应该抛出异常[重复]的主要内容,如果未能解决你的问题,请参考以下文章