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

本文关键字:异常 范围 参数 索引 | 更新日期: 2023-09-27 17:56:39

例如,使用列表对象时,检查超出范围的索引

List<MyObject> allServices = new List<MyObject>();
var indexOf = 0;
lnkBack.NavigateUrl = allServices[indexOf - 1].FullURL;
我认为它会抛出一个超出范围的

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

如果它类似于子字符串方法,其中子字符串(-1)将是一个参数,我会期待参数?

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

数组

并列出当您尝试访问负索引的项目时抛出ArgumentOutOfRangeException而不是IndexOutOfRangeExceptionIList<T>

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

这就是为什么它抛出IList<T> ArgumentOutOfRangeException而不是数组IndexOutOfRangeException的原因。

列表作为数组访问只是一个语法功能。幕后发生的事情是代码使用 Item 属性,将索引作为参数发送。