每次我必须通过索引访问数组时,我不得不检查我是否要创建IndexOutOfRange
例外。
我明白为什么数组会抛出异常而不是只返回null
。那会很酷,因为我可以使用??
运算符,但是这些是遗留类型,我很好用。
但为什么BCL小组没有实施TryGet(int index, out T value)
就像他们做的那样,例如List<T>
?
根据我的理解,他们可以把它放到Linq Extensions中,因为Array已经实现了IEnumerable
答案 0 :(得分:4)
你需要改变思考 - 它会抛出IndexOutOfRangeException
,因为不应该首先访问这些索引。
相反,您应该在访问索引之前检查数组长度:
string value = null;
if (i < array.Length) value = array[i];
或
for (int i=0; i<array.Length; i++) {
...
}
IndexOutOfRangeException
被归类为boneheaded exception - 如果它被抛出,你做错了。