Существует еще один важный и чрезвычайно простой способ, если только вы не требуете , что вы сортируете на месте: используйте LINQ to Objects.Например:
var orderedByName = cars.OrderBy(car => car.Name).ToList();
Вы можете заказать несколько проекций и различным образом, например:
var complex = cars.OrderByDescending(car => car.Year)
.ThenBy(car => car.Model)
.ThenByDescending(car => car.Make)
.ToList();
Я поставил ToList
в конце толькосоздайте List<Car>
в конце - если вам нужно только перебрать результаты, вы можете позволить ему выполнить заказ лениво:
var query = cars.OrderByDescending(car => car.Year)
.ThenBy(car => car.Model)
.ThenByDescending(car => car.Make);
foreach (var car in cars)
{
// Use car
}
Лично я считаю, что это самый гибкий способ сортировки.В противном случае, использование IComparer<T>
и Comparison<T>
является следующим наиболее гибким, так как любой может заказать этот путь.IComparable<T>
требует, чтобы сам класс решал, как элементы будут упорядочены, и вы можете реализовать его только один раз, что делает его несколько негибким.
IEquatable<T>
используется для сравнения элементов на равенство, поэтому используется для таких вещей, как HashSet<T>
, а не для заказа.