c# - 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>
.
最可能的原因是第三个,但startIndex
在0
(范围内)并且count
远低于l.Count
因此列表中的部分是 0 到 4,这是有效的。
我做错了什么以及如何解决?
解决方案
根据您链接的文档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);
推荐阅读
- postgresql - Postgres 创建 JSON 行值计数
- kubernetes-helm - Helm chart stable/nginx-ingress 1.33.5 位置?
- visual-studio-code - 如何在 vs 代码的文档弹出窗口中显示函数的作用?
- xml - LPX-00209:解析soap响应时保留以XML开头的PI名称
- flutter - 颤动 - 点击时更改暗/亮模式图标
- javascript - 如何将 setTimeout 与 bigint 一起使用?
- jsf - 如何使用 EL 将类作为方法参数传递
- javascript - 如何在 Antd React AutoComplete 选项中打开下拉菜单?
- linux - docker 容器中的节点无法使用 node_modules 文件夹
- excel - 将 Excel 工作表从一个工作簿移动到另一个工作簿