ArgumentOutOfRangeException和IndexOutOfRangeException的性能

时间:2014-04-29 22:44:29

标签: .net mono il indexoutofrangeexception

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

MSDN表示List<T>抛出ArgumentOutOfRangeException而不是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个检查?

1 个答案:

答案 0 :(得分:2)

为什么要这么麻烦?我同意他们没有使用相同的例外很奇怪,甚至可能更奇怪ArgumentOutOfRangeException的文字说索引超出了范围,但我没有看到这个添加了很有价值。

这些异常通常表示应该修复的程序错误。不应该抓住异常并处理&#34;。