Сортировка списка List с классами по алфавиту

Есть к примеру список в котором хранятся обьекты класса , как сделать так чтобы отсортировать список в алфавитном порядке по фамилии Surname?

List<Worker> workers = new List<Worker>();
workers.Add(new Worker { Name = "Donald", Surname = "Trump" , Vacancy = "Dev", Joined = 2015 });
workers.Add(new Worker { Name = "Barak", Surname = "Obama" , Vacancy = "HR", Joined = 2011 });
workers.Add(new Worker { Name = "Joe", Surname = "Biden" , Vacancy = "Team lead", Joined = 2020 });

Ответы (1 шт):

Автор решения: aepot

У вас есть 2 основные опции:

  • IEnumerable<T>.OrderBy(..)
  • List<T>.Sort(..)

Допустим, Worker - это запись. У вас это может быть класс, не важно, я взял запись только ради удобного вывода в консоль.

record Worker
{
    public string Name { get; set; }
    public string Surname { get; set; }
    public string Vacancy { get; set; }
    public int Joined { get; set; }
}

Тогда Linq будет выглядеть так

foreach (Worker worker in workers.OrderBy(w => w.Surname))
{
    Console.WriteLine(worker);
}   

А List.Sort будет выглядеть так

workers.Sort((left, right) => left.Surname.CompareTo(right.Surname));
foreach (Worker worker in workers)
{
    Console.WriteLine(worker);
}

Вывод в консоль одинаковый

Worker { Name = Joe, Surname = Biden, Vacancy = Team lead, Joined = 2020 }
Worker { Name = Barak, Surname = Obama, Vacancy = HR, Joined = 2011 }
Worker { Name = Donald, Surname = Trump, Vacancy = Dev, Joined = 2015 }

Но механика работы разная. В первом случае вы сортируете только вывод в консоль, а список остается неизменным, а во втором случае сортируется именно сам список.

→ Ссылка