2

我在我的库中添加了一个新类,它将成为公共文档 API 的一部分。底层数据结构是一个原生数组,尽管List<T>在第一次生成原生数组时使用。

MSDN 表示List<T>throwsArgumentOutOfRangeException而不是IndexOutOfRangeException(在访问本机数组时可以抛出)。

因此,我计划更新我的函数以始终ArgumentOutOfRangeException在我记录的 API 中保持一致性,如下所示:

public class MyClass {
    private int[] _values;

    public int GetValue(int index) {
        if (index < 0 || index >= _values.Length)
            throw new ArgumentOutOfRangeException("index");
        return _values[index];
    }
}

我的问题是这样的:

上述源代码是否会产生两个范围检查(我的一个 + 本机数组一个),或者 .NET 编译器是否足够聪明,可以删除这些IndexOutOfRangeException检查?

4

1 回答 1

2

何必?我同意他们不使用相同的异常很奇怪,甚至更奇怪的是,文本中ArgumentOutOfRangeException说索引超出范围,但我认为这并没有增加很多价值。

这些异常通常表示应该修复的程序错误。不应捕获和“处理”异常。

于 2014-04-30T15:01:34.340 回答