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

C#中OrderedDictionary按值数量降序排序报错的解决方法

解决OrderedDictionary按值数量降序排序的问题

错误原因

OrderedDictionary属于非泛型集合(位于System.Collections.Specialized命名空间),它未实现LINQ方法依赖的IEnumerable<KeyValuePair<TKey, TValue>>接口,因此无法直接调用OrderByDescending这类LINQ扩展方法。同时你原代码中ToDictionary返回的普通Dictionary,不仅与OrderedDictionary类型不匹配,还会丢失排序后的顺序(Dictionary不保证元素顺序)。

可行解决方案

将非泛型的OrderedDictionary转换为泛型集合排序后,重新构建一个新的OrderedDictionary来保留排序结果:

// 1. 将OrderedDictionary元素转为泛型键值对,并按值的数量降序排序
var sortedItems = dic.Cast<DictionaryEntry>()
                     .Select(entry => new KeyValuePair<string, List<string>>(
                         (string)entry.Key,
                         (List<string>)entry.Value))
                     .OrderByDescending(kv => kv.Value.Count);

// 2. 创建新的OrderedDictionary,沿用原有的字符串比较规则
var sortedOrderedDic = new OrderedDictionary(StringComparer.CurrentCultureIgnoreCase);

// 3. 将排序后的元素逐个加入新的OrderedDictionary,保留顺序
foreach (var item in sortedItems)
{
    sortedOrderedDic.Add(item.Key, item.Value);
}

// 替换原字典为排序后的结果
dic = sortedOrderedDic;

额外说明

  • Cast<DictionaryEntry>():这是LINQ处理非泛型集合的必要步骤,将OrderedDictionary的非泛型元素转换为可遍历的DictionaryEntry类型。
  • 手动构建OrderedDictionary:LINQ的ToDictionary返回的普通Dictionary不维护插入顺序,只有OrderedDictionary能确保排序后的元素顺序被保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:01:21