【发布时间】:2020-01-12 20:28:50
【问题描述】:
我有一个包含优先级枚举变量的“任务”列表。我需要按优先级排序此列表,但我的优先级规则不是基于枚举值、枚举名称或枚举描述。我的优先级基于随时可能改变的规则。
假设此时我必须按照我的 PriorityType IZ = 3 的任务必须在列表末尾的规则对我的所有任务进行排序。所有其他任务都必须先完成,所有任务之间没有优先级。
另一个规则可能是先订购任务 HT = 1,然后我不在乎,但最后 RF = 4。
public enum PriorityType
{
[Description("who")]
CL = 0,
[Description("one")]
HT = 1,
[Description("exe)]
SL = 2,
[Description("bar")]
IZ = 3,
[Description("foo")]
RF = 4
}
没有相关性和使用枚举器名称、值或描述的可能性,并且在我的软件中优先级可能会改变。
使用 LINQ 我这样做了,但结果没有排序
void Main()
{
var list = new Dictionary<string, QueueType>();
list.Add("one", QueueType.CL);
list.Add("two", QueueType.CL);
list.Add("three", QueueType.HT);
list.Add("four", QueueType.IZ);
list.Add("five", QueueType.RF);
list.Add("six", QueueType.SL);
list.OrderBy(y => y.Value == QueueType.HT)
.ThenBy(y => y.Value == QueueType.RF);
}
// Define other methods and classes here
public enum QueueType
{
CL = 0,
HT = 1,
SL = 2,
IZ = 3,
RF = 4
}
这可能吗? 是的,但有简单的方法吗? 使用 LinQ?
【问题讨论】:
-
有可能——这只是意味着您需要实现自己的
IComparer<T>并将其传递给OrderBy。 -
并注意 linq 操作不会改变源集合