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

如何使用LINQ根据Enum顺序对C#列表对象进行排序

]

我尝试了以下代码但未达到预期效果:
```csharp
var a = myList.OrderBy(x => x.W).ToList();
解决方案

你之前的代码直接按字符串x.W排序,是按照字母顺序排列(比如"Five"会排在"Four"前面),而不是枚举的定义顺序。要实现按枚举顺序排序,需要把字符串W转换为对应的Number枚举值,再按枚举的数值排序:

方法1:直接转换枚举后排序

var sortedList = myList.OrderBy(x => (Number)Enum.Parse(typeof(Number), x.W)).ToList();

枚举默认会按定义顺序分配数值(从0开始递增),所以将字符串解析为枚举后直接排序,就能匹配你想要的顺序。

方法2:添加无效值处理(可选)

如果列表中可能存在无法解析为Number的W值,可以用Enum.TryParse做验证,把无效值放到排序末尾:

var sortedList = myList.OrderBy(x => 
{
    if (Enum.TryParse(typeof(Number), x.W, out object enumVal))
    {
        return (Number)enumVal;
    }
    // 给无效值分配一个比最大枚举值更大的数值,让它排最后
    return (int)Number.Five + 1;
}).ToList();

方法3:预建映射字典(性能优化)

如果列表数据量较大,预创建字符串到枚举数值的字典可以避免重复解析,提升性能:

// 提前构建枚举名称到数值的映射
var enumOrderMap = Enum.GetValues(typeof(Number))
                       .Cast<Number>()
                       .ToDictionary(e => e.ToString(), e => (int)e);

// 用映射字典排序
var sortedList = myList.OrderBy(x => enumOrderMap[x.W]).ToList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:16:23