我在我的库中添加了一个新类,它将成为公共文档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
个检查?
答案 0 :(得分:2)
为什么要这么麻烦?我同意他们没有使用相同的例外很奇怪,甚至可能更奇怪ArgumentOutOfRangeException
的文字说索引超出了范围,但我没有看到这个添加了很有价值。
这些异常通常表示应该修复的程序错误。不应该抓住异常并处理&#34;。