5

在我的索引属性中,我检查索引是否超出范围。如果是,我抛出一个IndexOutOfBoundsException.

当我运行代码分析器(在 VS12 中)时,它会抱怨 CA1065: Unexpected exception in unexpected location。

参考CA1065的描述,只有

System.InvalidOperationException
System.NotSupportedException
System.ArgumentException
KeyNotFoundException

在索引 getter 中是允许的。

投掷IndexOutOfBoundsException对我来说似乎很自然,那么这里的推理是什么?(是的,我知道我可以关闭警告,我只是想知道原因)

4

2 回答 2

7

很多类都ArgumentOutOfRangeException用于此目的,包括List<T>. 这是一个子类,ArgumentException所以应该满足规则。我想您可能会争辩说,对于直接访问的向量等,实际上没有方法调用(它是专用的操作码 - ldelem*),因此这种情况下的索引实际上不是参数。不过,这似乎是一个软弱的论据。

于 2012-09-02T17:40:46.470 回答
5

请参阅 MSDN:IndexOutOfRangeException是系统异常,保留用于访问数组元素。它是由一些 MSIL 指令抛出的:ldelem., ldelema, stelem..

对于开发类,请使用 ArgumentOutOfRangeException。

于 2012-09-02T17:45:52.320 回答