索引getter中的IndexOutOfRangeException

Mar*_*oon 5 .net c# code-analyst

在我的索引属性中,我检查索引是否超出范围.如果是,我扔了IndexOutOfBoundsException.

当我运行Code Analyst(在VS12中)时,它会抱怨CA1065:意外位置出现意外异常.

仅参考CA1065的描述

System.InvalidOperationException
System.NotSupportedException
System.ArgumentException
KeyNotFoundException
Run Code Online (Sandbox Code Playgroud)

允许在索引的getter中.

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

Mar*_*ell 7

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


STO*_*STO 5

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

对于开发类,请使用ArgumentOutOfRangeException.