gpt4 book ai didi

C# 按枚举排序列表

转载 作者:太空狗 更新时间:2023-10-29 19:59:24 26 4
gpt4 key购买 nike

我有一个实体列表,其中有一个枚举。

public class Car
{
public int CarId { get; set; }

public string CarName { get; set; }

public CarCategory CarCategory { get; set; }
}

public enum CarCategory
{
None = 0,
kLowRange = 1,
kMidRange = 2,
kHighRange = 3
}

现在我有一个 Cars 列表,我想使用 Comparer 并在枚举上运行它,这样所有具有 CarCategory 为 kMidRange 和 kHighRange 的实体将排在列表的第一位。

我试过 answer但还没有找到任何运气。

谢谢。

更新:我有点犯了我正在做的错误。我在看

var sortedList = carList
.OrderBy(x => x.CarCategory,
new EnumComparer<CarCategory> {
CarCategory.kMidRange,
CarCategory.kHighRange});

但只得到相同的值。我必须添加 .ToList() 才能获得结果。

var sortedList = carList
.OrderBy(x => x.CarCategory,
new EnumComparer<CarCategory> {
CarCategory.kMidRange,
CarCategory.kHighRange})
.ToList();

会给我预期的结果。我的错!

最佳答案

enum 实际上是整数(在你的例子中是int)

The approved types for an enum are byte, sbyte, short, ushort, int,uint, long, or ulong.

参见 https://msdn.microsoft.com/en-us/library/sbbt4032.aspx了解详情。

由于 CarCategory 实现具有所需顺序中的项目,您可以只放置

 var sortedList = carList
.OrderByDescending(x => (int) (x.CarCategory))
.ToList();

请注意降序:您希望kHighRange 位于顶部。如果你想要一个任意命令,例如

kMidRange, kHighRange, None, kLowRange

我建议使用映射:

 // desired order: None should be 3d, LowRange 4th, MidRange 1st, HighRange 2nd 
int[] map = new[] {3, 4, 1, 2};

var sortedList = carList
.OrderBy(x => map[(int) (x.CarCategory)])
.ToList();

关于C# 按枚举排序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42550992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com