索引getter中的IndexOutOfRangeException

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

当我运行Code Analyst(在VS12中)时,它会抱怨CA1065:意外位置发生意外exception。

仅参考CA1065的描述

 System.InvalidOperationException System.NotSupportedException System.ArgumentException KeyNotFoundException 

允许在索引的getter中。

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

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

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

对于开发类,请使用ArgumentOutOfRangeException。