Сортировка списка со своими объектами по нескольким полям

Есть свой класс 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 варианта:

  1. Присвоить результат написанного вами выражения списку:

    private void Sort()
    {
         MyList = MyList.OrderBy(x => x.Index1).ThenBy(x => x.Index2).ThenBy(x => x.Index3).ToList();
    }
    
  2. Отсортировать результаты методом 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;
    }
    
→ Ссылка