从列表对象进行工作时,例如,检查超出范围的索引
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
更新:在编辑后,很明显
allServices
是List<T>
,它也实现了IList<T>
,正如您在documentation中看到的那样:这就是为什么它抛出
IndexOutOfRangeException
的IList<T>
而不是数组的ArgumentOutOfRangeException
的原因。关于c# - 索引超出范围异常与参数超出范围异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22856801/