2012-02-17 4 views
1

Это мой абстрактный базовый класс:список не получает сортируется с помощью IComparable <T>

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 
} 

Этот класс представляет Личность и imherits из класса BaseDataModel.

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

Но когда я пытаюсь сортировать список, используя метод sort(), он не работает. Он возвращает отсортированный список с 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(); 

    } 
} 

В чем проблема?

+0

список содержит объекты с нулевыми значениями. Он показывает 2 объекта, но все атрибуты равны нулю – Asdfg

ответ

3

Вы устанавливаете свойства p дважды; вы никогда не устанавливали p1.ID.

+0

ouch. Думаю, мне нужно успокоиться. – Asdfg

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);