从列表对象工作时,检查超出范围的索引,例如
List<MyObject> allServices = new List<MyObject>();
var indexOf = 0;
lnkBack.NavigateUrl = allServices[indexOf - 1].FullURL;
我认为它会使索引超出范围异常,它会抛出超出范围异常的参数。为什么这是一个我们正在测试的索引?
我是否期望参数是否类似于子串方法,其中substring(-1)将是一个参数?
答案 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
更新:在您编辑之后,allServices
是List<T>
,IList<T>
也实现了IList<T>.Item
,正如您在{{{ 3}}:
实施
IndexOutOfRangeException
这就是它抛出IList<T>
ArgumentOutOfRangeException
而不是{{1}}数组的原因。
答案 1 :(得分:2)
将列表作为数组访问只是一种语法功能。场景背后发生的是代码使用Item
property,将索引作为参数发送。