我想根据特定条件对自定义列表进行排序。我的列表中的每个项目都包含一个名为“Status”的属性,它是一个枚举,如下所示。
Empty = 0, Normal = 1, Aged = 2, Dead = 3
上面指定的值无法更改。当我对“状态”属性进行排序时,我希望顺序为“正常”、“老化”、“空”和“死亡”。我不知道如何最好地解决这个问题?
下面是我用于解决不同排序问题的类的示例。不确定如何“转换”此类来解决上述问题?
public class SortOrders : IComparer<OrderBlocks.Order>
{
private bool _sortDescending;
public SortOrders(bool sortDescending)
{
this._sortDescending = sortDescending;
}
public SortOrders()
: this(false) // sort ascending by default
{
}
public int Compare(OrderBlocks.Order x, OrderBlocks.Order y)
{
if (this._sortDescending)
{
return y.StatusGood.CompareTo(x.StatusGood);
}
else
{
return x.StatusGood.CompareTo(y.StatusGood);
}
}
}
最佳答案
这是我使用 Linq 的方法:
var sorted = myList.OrderBy(x =>
{
switch (x.Status)
{
case SomethingStatus.Normal:
return 0;
case SomethingStatus.Aged:
return 1;
case SomethingStatus.Empty:
return 2;
case SomethingStatus.Dead:
return 3;
default:
return 10;
}
});
关于c# - 列表自定义排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20678671/