如何在.net,c#中对用户定义的类进行排序

Pin*_*ong 2 .net c# sorting class

我有一个用户定义的类对象的集合,例如Car实例,对它进行排序的最佳方法是什么.

以下是可能的方法,哪一个是最好的,还有其他方法吗?

  1. IComparable的
  2. 比较器
  3. 对照
  4. IEquatable

任何想法都将非常感激

Jon*_*eet 11

还有另一种重要而且非常简单的方法,除非你绝对要求你就地排序:使用LINQ to Objects.例如:

var orderedByName = cars.OrderBy(car => car.Name).ToList();
Run Code Online (Sandbox Code Playgroud)

您可以通过多种投影进行订购,并以多种方式进行订购,如下所示:

var complex = cars.OrderByDescending(car => car.Year)
                  .ThenBy(car => car.Model)
                  .ThenByDescending(car => car.Make)
                  .ToList();
Run Code Online (Sandbox Code Playgroud)

我只是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
}
Run Code Online (Sandbox Code Playgroud)

我个人认为这是最灵活的排序方式.否则,使用IComparer<T>Comparison<T>是下一个最灵活的,因为任何人都可以这样订购.IComparable<T>需要类本身来决定如何订购项目,并且你只能实现一次,这使它有点不灵活.

IEquatable<T>用于比较项目的相等性,因此用于类似的事情HashSet<T>,而不是用于订购.