我有一个消息列表。 每条消息都有一个类型。
public enum MessageType
{
Foo = 0,
Bar = 1,
Boo = 2,
Doo = 3
}
枚举名称是任意的,不能更改。
我需要返回排序为:Boo、Bar、Foo、Doo 的列表
我目前的解决方案是创建一个 tempList,按我想要的顺序添加值,返回新列表。
List<Message> tempList = new List<Message>();
tempList.AddRange(messageList.Where(m => m.MessageType == MessageType.Boo));
tempList.AddRange(messageList.Where(m => m.MessageType == MessageType.Bar));
tempList.AddRange(messageList.Where(m => m.MessageType == MessageType.Foo));
tempList.AddRange(messageList.Where(m => m.MessageType == MessageType.Doo));
messageList = tempList;
我如何使用 IComparer 执行此操作? ?
最佳答案
使用 IComparer
的替代方法是构建一个排序字典。
var orderMap = new Dictionary<MessageType, int>() {
{ MessageType.Boo, 0 },
{ MessageType.Bar, 1 },
{ MessageType.Foo, 2 },
{ MessageType.Doo, 3 }
};
var orderedList = messageList.OrderBy(m => orderMap[m.MessageType]);
关于c# - 按枚举排序 List<T>,其中枚举乱序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17308818/