我对C#List
有一个疑问,下面的代码抛出ArgumentOutOfRangeException
:
List<int> l = new List<int>();
l.Add(1); l.Add(1); l.Add(1); l.Add(1); l.Add(1);
l.Add(1); l.Add(1); l.Add(1); l.Add(1); l.Add(1);
l.Add(1); l.Add(1); l.Add(1); l.Add(1); l.Add(1); // 15 elements
// v <--- From 0
l.FindLastIndex(0, 5, v => v != 1);
// ^ <--- up to 5 elements
据我理解上述代码,该方法将从元素0开始应用lambda,直到达到5个元素(元素4)为止,但是即使不一定按照我的方法,它也会抛出ArgumentOutOfRangeException
对the documentation的理解:
ArgumentOutOfRangeException
startIndex
在List<T>
的有效索引范围之外。-或-
count
小于0。-或-
startIndex
和count
在List<T>
中未指定有效部分。
最可能的原因是第三个原因,但是startIndex
是0
(在范围内)并且count
远低于l.Count
,因此列表中的部分是0到4,这是有效的。
我在做什么错以及如何解决?
答案 0 :(得分:5)
根据the documentation,您链接的function OnReflesh(Value)
{
var excep = richEditRapor.PerformCallback(Value);
hdnParameter.PerformCallback(Value);
}
正在进行向后搜索,这意味着它将转到FindLastIndex(...)
,而不是0
您提供的起点是0,实际上0和0之间的元素少于5个(您的数量)。
将您的代码更改为如下代码即可解决该问题:
Count-1
答案 1 :(得分:1)
您想要的(假设您想向后搜索前5个条目)
l.FindLastIndex(4, 5, v => v != 1);
因为索引是向后搜索的开始
因此它将从索引4搜索5个计数,然后返回索引0