索引超出范围异常与参数超出范围异常

时间:2014-04-04 07:55:05

标签: c# exception indexing arguments range

从列表对象工作时,检查超出范围的索引,例如

List<MyObject> allServices = new List<MyObject>();
var indexOf = 0;

lnkBack.NavigateUrl = allServices[indexOf - 1].FullURL;

我认为它会使索引超出范围异常,它会抛出超出范围异常的参数。为什么这是一个我们正在测试的索引?

我是否期望参数是否类似于子串方法,其中substring(-1)将是一个参数?

2 个答案:

答案 0 :(得分:3)

我假设allServices是一个数组。当您尝试访问负索引处的项时,数组inplenments IList<T>会引发ArgumentOutOfRangeException而不是IndexOutOfRangeException

MSDN

  

ArgumentOutOfRangeException索引不是IList<T>

中的有效索引

您可以使用以下代码重现它:

IList<string> test = new string[]{ "0" };
string foo = test[-1];  // ArgumentOutOfRangeException

如果您将其用作string[],则会获得预期的IndexOutOfRangeException

string[] test = new string[]{ "0" };
string foo = test[-1];  // IndexOutOfRangeException

更新:在您编辑之后,allServicesList<T>IList<T>也实现了IList<T>.Item,正如您在{{{ 3}}:

  

实施IndexOutOfRangeException

这就是它抛出IList<T> ArgumentOutOfRangeException而不是{{1}}数组的原因。

答案 1 :(得分:2)

将列表作为数组访问只是一种语法功能。场景背后发生的是代码使用Item property,将索引作为参数发送。