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

C#代码索引越界错误修复问询:无效if条件引发集合问题

修复C#代码中的索引越界与逻辑问题

问题分析

  1. 索引越界:原代码for循环条件为count < planeList.Count(),当count等于planeList.Count()-1时,count+1会超出集合的最大索引(集合索引从0开始,最大索引为Count-1),直接触发"索引超出范围"异常。
  2. 冗余循环:外层foreach和内层for循环重复遍历集合,导致输出内容多次重复,完全无意义。
  3. 排序逻辑混乱:每次循环都执行排序操作,既浪费性能,又会因集合顺序频繁变化导致遍历逻辑错乱。排序应该是一次性操作,而非遍历过程中反复执行。

修复后的代码

var myAirlineNew = Airline.FromXml(fileName);
var planeList = myAirline.GetPlanes().ToList();

// 判断是否存在起飞重量相等的相邻飞机,以此决定排序方式
bool hasMatchingTakeOffWeight = false;
for (int count = 0; count < planeList.Count - 1; count++)
{
    if (planeList[count].TakeOffWeight == planeList[count + 1].TakeOffWeight)
    {
        hasMatchingTakeOffWeight = true;
        break; // 找到一组相等值即可终止判断
    }
}

// 执行对应排序逻辑
if (hasMatchingTakeOffWeight)
{
    myAirline.SortByWeight();
}
else
{
    myAirline.SortByNumber();
}

// 重新获取排序后的飞机列表
planeList = myAirline.GetPlanes().ToList();

// 统一输出所有飞机信息
foreach (var plane in planeList)
{
    Console.WriteLine($"Plane: {plane.Type},{plane.Number},{plane.Fcs},{plane.TakeOffWeight} kg");
}

修改关键点

  • 修正索引问题:将for循环终止条件改为count < planeList.Count - 1,确保count+1始终在合法索引范围内。
  • 优化排序逻辑:先一次性判断集合特征,再执行单次排序,避免重复排序造成的性能损耗和逻辑混乱。
  • 移除冗余遍历:去掉外层无意义的foreach循环,改为排序完成后统一遍历输出,避免重复内容。
  • 同步集合状态:排序后重新获取飞机列表,确保后续输出的是排序后的最新数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:30:45