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

C# 如何在.net、c中对用户定义的类进行排序#,c#,.net,class,sorting,C#,.net,Class,Sorting,我有一个用户定义的类对象集合,例如汽车实例,排序的最佳方法是什么 下面是可能的方法,哪一种是最好的,还有其他方法吗 不可比 比较器 比较 充足的 任何想法都将非常受欢迎还有另一种重要且极其简单的方法,除非您绝对要求您进行适当排序:使用LINQ对对象进行排序。例如: var orderedByName = cars.OrderBy(car => car.Name).ToList(); 您可以通过多个投影以不同的方式进行排序,如下所示: var complex = cars.OrderByD

我有一个用户定义的类对象集合,例如汽车实例,排序的最佳方法是什么

下面是可能的方法,哪一种是最好的,还有其他方法吗

  • 不可比
  • 比较器
  • 比较
  • 充足的

  • 任何想法都将非常受欢迎

    还有另一种重要且极其简单的方法,除非您绝对要求您进行适当排序:使用LINQ对对象进行排序。例如:

    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
    放在末尾,以便在末尾创建一个
    列表
    ——如果您只需要迭代结果,可以让它惰性地执行排序:

    var query = cars.OrderByDescending(car => car.Year)
                      .ThenBy(car => car.Model)
                      .ThenByDescending(car => car.Make);
    
    foreach (var car in cars)
    {
        // Use car
    }
    
    我个人认为这是最灵活的分类方式。否则,使用
    IComparer
    Comparison
    是下一个最灵活的方法,因为任何人都可以这样订购
    IComparable
    要求类本身决定如何对项目进行排序,并且只能实现一次,这使得它有些不灵活


    IEquatable
    用于比较项目是否相等,也用于类似于
    HashSet
    的内容,而不是用于排序。

    谢谢您的建议,这可以解决我的理解。@John,这是离题的。我深入阅读了你的两本书。除了你的书之外,你会为一位c#专家推荐什么样的c#书。如何申请谷歌的软件工程师?@Pingpong:真正的C语言书籍?规范,理想情况下。。。如果你已经对C语言有了深入的了解,那么我所知道的任何一本书都不会涉及到更多的语言细节。请注意,简而言之,CLR通过C#和C#4在其他方面深入很多。至于申请谷歌,请点击我的简历skeet@pobox.com.@John,简而言之,通过C#的CLR和C#4都是很棒的书,C#的深度也是如此。我会在晚上做的skeet@pobox.com.