当参数计数小于List.Count时,FindLastIndex ArgumentOutOfRangeException

时间:2018-09-20 11:03:11

标签: c# list

我对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)为止,但是即使不一定按照我的方法,它也会抛出ArgumentOutOfRangeExceptionthe documentation的理解:

  

ArgumentOutOfRangeException

     

startIndexList<T>的有效索引范围之外。

     

-或-

     

count小于0。

     

-或-

     

startIndexcountList<T>中未指定有效部分。

最可能的原因是第三个原因,但是startIndex0(在范围内)并且count远低于l.Count,因此列表中的部分是0到4,这是有效的。

我在做什么错以及如何解决?

2 个答案:

答案 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