按属性c#对对象列表进行排序

本文关键字:排序 列表 对象 属性 | 更新日期: 2023-09-27 18:27:47

我有这个类:

public class Leg
{
    public int Day { get; set; }
    public int Hour { get; set; }
    public int Min { get; set; }
}

我有一个函数可以得到一个腿的列表,叫做GetLegs()

List<Leg> legs = GetLegs();

现在我想对这个列表进行排序。所以我首先要考虑当天,然后是小时,最后是分钟。我应该如何解决此排序问题?

感谢

按属性c#对对象列表进行排序

也许是这样的:

List<Leg> legs = GetLegs()
                .OrderBy(o=>o.Day)
                .ThenBy(o=>o.Hour)
                .ThenBy(o=>o.Min).ToList();

您可以编写一个自定义IComparer<Leg>并将其传递给List<T>.Sort方法。

或者,您可以在类中实现IComparable<Leg>,并简单地调用List<T>.Sort

您需要在类上实现IComparable<T>接口,以便用C#语言对对象进行更直观的排序。当一个类实现IComparable时,您还必须实现public method CompareTo(T).

Leg类实现了IComparable<Leg>,这意味着Leg实例可以与其他Leg实例进行比较。

    #region "Leg Class that implements IComparable interface"
    public class Leg:IComparable<Leg>
    {
        public int Day { get; set; }
        public int Hour { get; set; }
        public int Min { get; set; }
        public int CompareTo(Leg leg)
        {
            if (this.Day == leg.Day)
            {
                if (this.Hour == leg.Hour)
                {
                    return this.Min.CompareTo(leg.Min);
                }
            }
            return this.Day.CompareTo(leg.Day);
        }
    }
    #endregion

   //Main code
   List<Leg> legs = GetLegs();
   legs.Sort();

使用Enumerable.OrderBy方法。

我想这会有所帮助。

var o = legs.OrderBy(x => x.Day)
            .ThenBy(x => x.Hour)
            .ThenBy(x => x.Min);