为什么C#中没有Array.TryGet这样的东西?

时间:2013-06-21 15:53:19

标签: c# arrays

每次我必须通过索引访问数组时,我不得不检查我是否要创建IndexOutOfRange例外。

我明白为什么数组会抛出异常而不是只返回null。那会很酷,因为我可以使用??运算符,但是这些是遗留类型,我很好用。

但为什么BCL小组没有实施TryGet(int index, out T value)  就像他们做的那样,例如List<T>? 根据我的理解,他们可以把它放到Linq Extensions中,因为Array已经实现了IEnumerable

1 个答案:

答案 0 :(得分:4)

你需要改变思考 - 它会抛出IndexOutOfRangeException,因为不应该首先访问这些索引

相反,您应该在访问索引之前检查数组长度

string value = null;
if (i < array.Length) value = array[i];

for (int i=0; i<array.Length; i++) {
    ...
}

IndexOutOfRangeException被归类为boneheaded exception - 如果它被抛出,你做错了。