我需要在列表中的对象实例中对属性进行排序,如下所示:
public List<CustomClass> lCustomClasses = new List<CustomClass>();
CustomClass有一个属性MyField,它可以具有以下值之一:
1,2,3
我需要将列表排序为asc或desc,而不是按3,1,2
排序任何快捷方式都可以在不复制到其他列表的情况下执行此操作吗?
答案 0 :(得分:2)
答案 1 :(得分:1)
奇怪的要求。 :)
无论如何,假设你只支持1,2和3,正如其他人建议你可以自己编写IComparer<T>
。 e.g。
class Program
{
static void Main(string[] args)
{
List<CustomClass> list = new List<CustomClass>()
{
new CustomClass(){MyField = 3},
new CustomClass(){MyField = 2},
new CustomClass(){MyField = 1},
};
PrintList(list);
list.Sort(new CustomClassComparer());
PrintList(list);
Console.ReadLine();
}
private static void PrintList(List<CustomClass> list)
{
foreach (var item in list)
{
if (item != null)
Console.WriteLine("MyField: {0}", item.MyField);
else
Console.WriteLine("MyField: null");
}
}
}
public class CustomClass
{
public int MyField { get; set; }
}
public class CustomClassComparer : IComparer<CustomClass>
{
public int Compare(CustomClass x, CustomClass y)
{
if (x == null)
{
if (y == null)
return 0;
return -1;
}
if (y == null)
return 1;
if (x.MyField == y.MyField)
return 0;
if (x.MyField == 2)
return 1;
if (x.MyField == 1)
if (y.MyField == 3)
return 1;
else
return -1;
return -1;
}
}
或者,您可以制作CustomClass
IComparable<T>
。
答案 2 :(得分:0)
AFAIK List.Sort
就地运作。如果您使用自定义比较运算符(如this answer中建议的那样),您可能可以达到您想要的效果:
lCustomClasses.Sort((x, y) => my_compare(x.MyField, y.MyField));