我需要在一个对象,它是一个列表中的一个实例排序的属性,像这样:如何排序列表既不递增或递减,但自
public List<CustomClass> lCustomClasses = new List<CustomClass>();
CustomClass有一个属性MyField的可以有下列值之一:
1,2,3
我需要排序列表中没有ASC或DESC而是为了通过3,1,2
任何快捷方式这样做没有复制到另一个目录?
我需要在一个对象,它是一个列表中的一个实例排序的属性,像这样:如何排序列表既不递增或递减,但自
public List<CustomClass> lCustomClasses = new List<CustomClass>();
CustomClass有一个属性MyField的可以有下列值之一:
1,2,3
我需要排序列表中没有ASC或DESC而是为了通过3,1,2
任何快捷方式这样做没有复制到另一个目录?
奇怪的要求。 :)
反正,假设你只支持1,2和3,正如其他人建议你可以自己写IComparer<T>
。例如
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>
。
AFAIK List.Sort
就地运行。如果您使用自定义的比较操作,就像在this answer建议,你也许可以达到你想要的东西:
lCustomClasses.Sort((x, y) => my_compare(x.MyField, y.MyField));
您可能正在编写自己的比较器。 http://msdn.microsoft.com/en-us/library/system.collections.icomparer.aspx – Tim 2013-03-01 01:39:02