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

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

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

我认为它将抛出索引超出范围的异常,而将参数抛出超出范围的异常。为什么当它是我们要测试的索引时呢?

我希望有一个类似substring方法的参数,其中substring(-1)是一个参数?

最佳答案

我假设allServices是一个数组。数组填充IList<T>,当您尝试以负索引访问项目时会抛出ArgumentOutOfRangeException而不是IndexOutOfRangeException:

MSDN:



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

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>,正如您在documentation中看到的那样:



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

关于c# - 索引超出范围异常与参数超出范围异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22856801/

10-10 03:28