只是一种思路:
class Journey
{
public enum JourneyStatus
{
Enroute,
Finished,
Error
}
public string Name;
public JourneyStatus Status;
}
使用排序依据:
var journeys = new List<Journey>();
journeys.Add(new Journey() { Name = "Test1", Status = Journey.JourneyStatus.Enroute });
journeys.Add(new Journey() { Name = "Test2", Status = Journey.JourneyStatus.Error });
journeys.Add(new Journey() { Name = "Test3", Status = Journey.JourneyStatus.Finished });
journeys.Add(new Journey() { Name = "Test4", Status = Journey.JourneyStatus.Enroute });
journeys = journeys.OrderBy(x => x.Status).ToList();
foreach (var j in journeys)
Console.WriteLine("{0} : {1}", j.Name, j.Status);
输出:
Test1 : Enroute
Test4 : Enroute
Test3 : Finished
Test2 : Error
或者你可以修改拉姆达传递给排序依据映射状态的值字符串到int
。
在某些情况下,您可能想要实施IComparer<T>
,就像Jon说的那样。它可以帮助保持排序逻辑和类定义本身在一个地方。