我TShirtSizeComparer
用基类实现Comparer<object>
。当然,您必须将其调整为可用的大小和对象:
public class TShirtSizeComparer : Comparer<object>
{
// Compares TShirtSizes and orders them by size
public override int Compare(object x, object y)
{
var _sizesInOrder = new List<string> { "None", "XS", "S", "M", "L", "XL", "XXL", "XXXL", "110 cl", "120 cl", "130 cl", "140 cl", "150 cl" };
var indexX = -9999;
var indexY = -9999;
if (x is TShirt)
{
indexX = _sizesInOrder.IndexOf(((TShirt)x).Size);
indexY = _sizesInOrder.IndexOf(((TShirt)y).Size);
}
else if (x is TShirtListViewModel)
{
indexX = _sizesInOrder.IndexOf(((TShirtListViewModel)x).Size);
indexY = _sizesInOrder.IndexOf(((TShirtListViewModel)y).Size);
}
else if (x is MySelectItem)
{
indexX = _sizesInOrder.IndexOf(((MySelectItem)x).Value);
indexY = _sizesInOrder.IndexOf(((MySelectItem)y).Value);
}
if (indexX > -1 && indexY > -1)
{
return indexX.CompareTo(indexY);
}
else if (indexX > -1)
{
return -1;
}
else if (indexY > -1)
{
return 1;
}
else
{
return 0;
}
}
}
要使用它,您只需拥有一个 List 或任何您的对象并执行以下操作:
tshirtList.Sort(new TShirtSizeComparer());
您“硬编码”的顺序优先,其余的放在后面。
我确信它可以做得更聪明,更通用,以避免对所有内容进行硬编码。例如,您可以查找以“S”结尾的尺寸,然后检查有多少 X(例如 XXS)或 X 之前的数字(例如 2XS)并按此排序,然后重复“L”以及其他“主要尺寸” .