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

C# Unity循环判断后访问列表下一个元素仍报IndexOutOfRange异常

问题排查与解决方案

问题根源

你的边界判断条件阈值设置错误,差了1个单位的偏移:

  • C#中列表的有效索引范围是0 ~ 列表长度 - 1,只要下一个索引i+1大于等于keys.Count,就已经属于越界范围
  • 你原有的判断if (keys.Count < i + 1)只有当i+1比keys.Count大的时候才会触发,但当i+1等于keys.Count时判断不生效,此时访问keys[i+1]就会触发越界异常

举个实际例子验证:假设keys共有3个元素,keys.Count = 3,有效索引为0、1、2:

  • 当i = 2时,i+1 = 3,此时判断3 < 3结果为false,不会触发break
  • 后续执行keys[3]直接超出有效索引范围,抛出异常

解决方案

不需要修改for循环的终止条件,根据你的业务场景可以选择两种修改方式:

方式1:保留break逻辑,修正判断条件

for (int i = 0; i < keys.Count; i++)
{
    // 当下一个索引超出有效范围时直接跳出
    if (i + 1 >= keys.Count)
        break;

    Key nextKey = keys[i + 1];
    // 后续原有逻辑保持不变...
}

方式2:不跳出循环,仅隔离nextKey访问逻辑

如果你的循环体中还包含对当前keys[i]的处理逻辑,不想因为提前break导致最后一个元素的处理逻辑丢失,可以用该方案:

for (int i = 0; i < keys.Count; i++)
{
    // 这里可以保留你处理当前keys[i]的原有逻辑,最后一个元素也能正常执行
    // ...

    // 只有存在下一个元素时才执行nextKey相关逻辑
    if (i + 1 < keys.Count)
    {
        Key nextKey = keys[i + 1];
        // 处理nextKey的逻辑
    }
}

该方案既不会触发越界,也不会影响你原有循环体里针对每个元素的处理逻辑,完全可以避免修改终止条件后其他部分运行不符合预期的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:06:01