首页 > 解决方案 > FindLastIndex ArgumentOutOfRangeException 当参数计数小于 List.Count

问题描述

我对有关 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的理解,它会抛出即使它不能:

ArgumentOutOfRangeException

startIndex超出 的有效索引范围List<T>

-或者-

count小于 0。

-或者-

startIndex并且count不要在List<T>.

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

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

标签: c#list

解决方案


根据您链接的文档FindLastIndex(...)正在进行向后搜索,这意味着它转到0,而不是Count-1

您提供 0 作为起点,实际上 0 和 0 之间的元素少于 5 个(您的计数)。

将您的代码更改为这样的代码将解决它:

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);

l.FindLastIndex(l.Count - 1, 5, v => v != 1);

推荐阅读