You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用List.RemoveRange移除元素时触发ArgumentOutOfRange异常求助

解决List调用RemoveRange时的ArgumentOutOfRangeException问题

这个报错的核心原因很明确:你传入RemoveRange的起始索引是负数!

当你的points集合元素数量小于8的时候,points.Count - 8就会变成负数,而RemoveRange要求第一个参数(起始索引)必须是非负整数,同时还要满足起始索引加上要删除的数量不超过集合总元素数,这就直接触发了ArgumentOutOfRangeException。

你提到集合原本有379个元素,但实际调用RemoveRange时,可能集合的元素数量已经被其他操作削减到不足8个了——比如构造函数里的循环只生成了28个元素,如果后续没有添加更多元素,或者有删除操作,那Count就可能小于8。

两种安全的解决方案:

方案1:先判断元素数量再执行删除

先检查集合元素是否足够8个,再调用RemoveRange,从根源避免索引负数的情况:

if (points.Count >= 8)
{
    points.RemoveRange(points.Count - 8, 8);
}
// 可选处理:如果元素不足8个,你可以选择清空集合或者什么都不做
// else { points.Clear(); }

方案2:用Linq截取保留前N个元素

这种方式更简洁,不管集合有多少元素,都能安全地保留除最后8个之外的元素(如果元素不足8个就直接清空):

using System.Linq; // 需要引入Linq命名空间

// 取前(总元素数-8)个,若总元素数<8则取0个(即清空集合)
points = points.Take(Math.Max(points.Count - 8, 0)).ToList();

额外提醒

调用RemoveRange时一定要注意两个参数的合法性:

  • 起始索引index必须满足 0 ≤ index < points.Count
  • 要删除的数量count必须满足 index + count ≤ points.Count

内容的提问来源于stack exchange,提问作者kubaklamca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:22:34