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

C#循环处理日志报Index was outside the bounds of the array错误

报错根因

你的代码触发数组索引越界,核心有3个问题:

  1. 遍历逻辑缺陷:使用foreach遍历日志数组时,没有维护当前行的索引变量index,代码里直接引用未正确赋值的index做计算,初始值不可控。
  2. 索引偏移错误:需求要求检查ERROR行的下一行(索引为index+1)是否包含at,但你的代码直接计算到descNb = index + 3的位置,索引偏移完全不符合预期。
  3. 缺少边界判断:所有读取logs[descNb]的操作,都没有提前判断descNb是否超出数组最大索引(数组最大索引为logs.Length - 1);尤其是while循环内先执行descNb++再读取数组内容,只要ERROR行出现在日志末尾附近,后续没有足够行数时,就会直接触发越界异常。
符合需求的正确实现
// 日志数组为空时直接返回,避免后续异常
if (logs == null || logs.Length == 0)
{
    return;
}

for (int lineIndex = 0; lineIndex < logs.Length; lineIndex++)
{
    string currentLogLine = logs[lineIndex];
    if (currentLogLine.Contains("ERROR"))
    {
        string checkDescr = string.Empty;
        int checkIndex = lineIndex + 1;
        
        // 先判断下一行是否存在、且包含" at ",符合条件才进入追加逻辑
        if (checkIndex < logs.Length && logs[checkIndex].Contains(" at "))
        {
            // 循环条件先判断索引合法,再判断内容匹配,避免越界
            while (checkIndex < logs.Length && logs[checkIndex].Contains(" at "))
            {
                checkDescr += logs[checkIndex];
                checkIndex++;
            }
        }

        // 此处checkDescr即为当前ERROR对应的所有堆栈跟踪内容,可按需做后续处理
    }
}
关键修复说明
  • 改用for循环遍历,直接通过循环变量获取当前行的准确索引,不存在索引丢失问题
  • 所有数组访问操作前,都先校验索引是否在合法范围内,从根源上杜绝索引越界
  • 对齐需求逻辑:从ERROR行的下一行开始检查,没有多余的索引偏移
  • 调整循环判断顺序:先校验索引合法性、内容匹配度,再执行追加和索引自增,不会出现索引超出范围后再读数组的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:21:22