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

