2012-02-17 10 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 
} 

このクラスはBaseDataModelクラスから人とimheritsを表します。

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

しかし、sort()メソッドを使用してリストをソートしようとすると、それは動作しません。 2つのオブジェクトを含むソートされたリストを返しますが、それらのオブジェクトのすべてのプロパティはnullです。

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

リストはNULL値を持つオブジェクトが含まれています。それは2つのオブジェクトを表示しますが、すべての属性はnull – Asdfg

答えて

3

pのプロパティを2回設定しています。決してp1.IDを設定しないでください。

+0

です。私は落ち着かせる必要があると思う。 – 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); 
関連する問題