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

控制台应用中列表按名称排序失败及枚举修改异常求助

问题解决思路

1. 遍历集合时调用Sort()触发异常的解决方案

异常System.InvalidOperationException: Collection was modified; enumeration operation may not execute.的核心原因是:foreach遍历过程中不允许修改集合的结构或元素顺序,而Sort()方法会重新排列列表元素,属于集合修改操作。

正确做法是将排序操作移至遍历之前执行:

case 1: // View Products
Console.Clear();
currentItemList.Sort(); // 先完成排序,再执行遍历
foreach (var item in currentItemList)
{
    item.Display();
}
break;

2. Sort()不生效的排查与修复

检查CompareTo方法的健壮性

你当前的CompareTo实现逻辑本身正确,但如果Name字段存在null值,会触发空引用异常,建议补充判空逻辑:

public int CompareTo(Item b)
{
    if (b == null) return 1;
    // 可选添加忽略大小写的排序规则,根据需求调整
    return string.Compare(this.Name, b.Name, StringComparison.OrdinalIgnoreCase);
}

同时确认currentItemList确实是从Products字典中正确获取的目标列表,避免引用错误的集合。

LINQ OrderBy的正确用法

OrderBy方法不会修改原列表,而是返回一个新的排序后序列,因此必须遍历这个新序列才能看到排序效果:

case 1: // View Products
Console.Clear();
// 生成排序后的新列表并遍历
var sortedList = currentItemList.OrderBy(o => o.Name).ToList();
foreach (var item in sortedList)
{
    item.Display();
}
break;

如果需要让原列表保持排序状态,可将新列表赋值给原变量:currentItemList = sortedList;

3. 额外优化建议

  • 无需在Item构造函数添加元素后立即排序,仅在查看前执行排序即可,减少不必要的性能消耗。
  • 若需要列表始终保持有序,可在每次添加元素后调用Sort()(单线程控制台应用无需考虑线程安全问题)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:22:38