索引器是不是应该抛出异常[重复]

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 是什么意思?在大多数情况下,索引器在找不到索引时会抛出异常(请参阅DictionaryList、...)。 Arrays 毫不犹豫地抛出IndexOutOfRangeException,你为什么要这么做? 你们是对的人,阅读帖子,谢谢:) 我可以想到一个数据结构,你不会想要一个IndexOutOfRangeException:一个环形缓冲区。例如:如果您尝试访问元素 01020 等,则包含 10 个元素的环将返回第一个元素,如果您要求访问 111,则返回第二个元素, 21,等等等等。它可能有用。不过,我不知道这样的数据结构是否存在,因为它很容易实现:ring[i % ring.Count] @Nolonar,在这种情况下,索引 1521 处的元素存在。因此,没有理由返回 null 或抛出异常。 【参考方案1】:

嗯,这取决于什么是“预期”行为以及您是否可以从错误中恢复。在这种情况下,您将决定返回 null 是否是有效的返回值。大多数情况下,集合索引器应在索引无效时抛出ArgumentOutOfRangeException

【讨论】:

以上是关于索引器是不是应该抛出异常[重复]的主要内容,如果未能解决你的问题,请参考以下文章

抛出啥异常? (Python)[重复]

MongoDb c# .net Save 抛出重复键异常

当来自 db 的数据不好时是不是应该抛出异常?

Python list.index 在找不到索引时抛出异常

为啥尝试更改 _arr[3] 时没有抛出异常?

JUnit 测试异常 [重复]