【问题标题】:Performance with ArgumentOutOfRangeException and IndexOutOfRangeExceptionArgumentOutOfRangeException 和 IndexOutOfRangeException 的性能
【发布时间】:2014-04-29 22:44:29
【问题描述】:

我在我的库中添加了一个新类,它将成为公共文档 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 检查?

【问题讨论】:

  • 何必呢?我同意他们不使用相同的异常很奇怪,甚至更奇怪的是ArgumentOutOfRangeException 的文本说索引超出范围,但我认为这不会增加很多价值。这些异常通常表示应该修复的程序错误。不应捕获和“处理”异常
  • @sircodesalot 将访问封装在try...catch 块中以捕获IndexOutOfRangeException 并抛出ArgumentOutOfRangeException 是否更有意义?
  • @BrianRasmussen 我必须说这是一个很好的论点。如果您将其发布为答案,那么我会接受它:)

标签: .net mono il indexoutofrangeexception


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2022-01-12
    相关资源
    最近更新 更多