Сортировка списка со своими объектами по нескольким полям
Есть свой класс MyClass:
public class MyClass
{
public MyClass(string name, int index1, int index2, int index3)
{
Name = name;
Index11 = index1;
Index12 = index2;
Index13 = index3;
}
internal string Name { get; set; }
internal int Index1{ get; set; }
internal int Index2 { get; set; }
internal int Index3 { get; set; }
}
и список:
private List<MyClass> MyList= new List<MyClass>();
Мне нужен метод, который бы сортировал в начале по Index1, затем по Index2 и в самом конце по Index3. Я пробовал так, но не работает, не знаю где ошибаюсь
private void Sort()
{
MyList.OrderBy(x => x.Index1).ThenBy(x => x.Index2).ThenBy(x => x.Index3).ToList();
}
Ответы (1 шт):
Автор решения: Vlad
→ Ссылка
У вас есть 2 варианта:
Присвоить результат написанного вами выражения списку:
private void Sort() { MyList = MyList.OrderBy(x => x.Index1).ThenBy(x => x.Index2).ThenBy(x => x.Index3).ToList(); }Отсортировать результаты методом Sort (если нельзя выполнить присвоение):
myList.Sort(Compare); static int Compare(MyClass x, MyClass y) { // добавить проверку на null по вкусу var result = x.Index1 - y.Index1; if (result == 0) { return Compare2(x, y); } return result; } static int Compare2(MyClass x, MyClass y) { var result = x.Index2 - y.Index2; if (result == 0) { return x.Index3 - y.Index3; } return result; }