列表未使用IComparable <t> </t>进行排序

时间:2012-02-17 18:19:32

标签: c# list sorting icomparable

这是我的抽象基类:

public abstract class BaseDataModel<T> : System.IComparable<T> where T : BaseDataModel<T>
{
    public int ID { get; set; }
    public int CreatedBy { get; set; }
    public DateTime CreatedOn { get; set; }
    public int? UpdatedBy { get; set; }
    public DateTime? UpdatedOn { get; set; }


    #region IComparable<T> Members

    public virtual int CompareTo(T other)
    {
        return ID.CompareTo(other.ID);
    }

    #endregion
}

此类表示来自BaseDataModel类的Person和imherits。

public class Person : BaseDataModel<Person>
    {
        public string Name { get; set; }
    }

但是当我尝试使用sort()方法对List进行排序时,它不起作用。它返回带有2个对象的排序列表,但这些对象中的所有属性都为空。

    static void Main(string[] args)
    {
        List<Person> pList = new List<Person>();

        Person p = new Person();
        p.ID=2;
        p.Name="Z";
        pList.Add(p);

        Person p1 = new Person();
        p.ID = 1;
        p.Name = "A";
        pList.Add(p1);

        pList.Sort();





        Console.Read();

    }
}

这里有什么问题?

2 个答案:

答案 0 :(得分:3)

您要设置p两次的属性;你永远不会设置p1.ID

答案 1 :(得分:2)

问题在于:

  Person p = new Person();
    p.ID=2;
    p.Name="Z";
    pList.Add(p);

    Person p1 = new Person();
    p.ID = 1;
    p.Name = "A";
    pList.Add(p1);

这应该是:

  Person p = new Person();
    p.ID=2;
    p.Name="Z";
    pList.Add(p);

    Person p1 = new Person();
    // Change properties of p1, not p!
    p1.ID = 1;
    p1.Name = "A";
    pList.Add(p1);