【问题标题】:comparing two objects by two properties通过两个属性比较两个对象
【发布时间】:2023-03-31 16:05:02
【问题描述】:

如何使用两个属性对列表中的两个对象进行排序,一个是升序,另一个是降序。使用 linq 时,它说我需要实现 IComparer 接口,但不确定如何通过同时使用两个属性来比较两个对象。

按姓名升序和年龄降序说 Person 类。

【问题讨论】:

    标签: c# object compare linq-to-objects


    【解决方案1】:

    嗯,你需要决定哪个是你的主要比较。如果第一个给出相等,则仅使用 secondary 比较。例如:

    public int Compare(Person p1, Person p2)
    {
        int primary = p1.Name.CompareTo(p2.Name);
        if (primary != 0)
        {
            return primary;
        }
        // Note reverse order of comparison to get descending
        return p2.Age.CompareTo(p1.Age);
    }
    

    (这可以用各种方式更简洁地编写,但我保持非常明确,以便您可以理解这些概念。)

    请注意,在 MiscUtil 我有一些构建块,因此您可以使用 lambda 表达式轻松构建比较器,编写比较器等。

    【讨论】:

      【解决方案2】:

      如果您想创建列表的新副本(因此您的原始列表中仍然有原始订单),您可以这样做:

      List<Person> unsortedList;
      
      sortedList = unsortedList.OrderBy(p => p.Name).ThenByDescending(p => p.Age);
      

      【讨论】:

        【解决方案3】:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-23
          • 2021-05-08
          相关资源
          最近更新 更多