我需要在一個對象,它是一個列表中的一個實例排序的屬性,像這樣:如何排序列表既不遞增或遞減,但自
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