2013-03-06 16 views
1

排序排序列表 所以我有一個類 如何,其中T是我自己的類,我想通過class.someString

Class MyClass{ 
    string myString; 

    MyClass(string newString){ 
    myString = newString; 
    } 
} 

,我有這些

List<MyClass> myList = new List<MyClass>(); 
myList.Add(new MyClass(some string...); 

列表可以我使用List.Sort根據類的字段值來排序對象? 如果是這樣怎麼樣?

感謝

回答

4

您可以使用Enumerable.OrderBy

myList = myList.OrderBy(x => x.myString).ToList(); 

但是請注意,這創建一個基於舊列表上一個新的列表。在很多情況下,這些都不會有所作爲,但這是值得注意的。


或者,因爲你是僅限於.NET 2.0,你可以自定義一個函數進行比較

class MyClass 
{ 
    string myString; 

    ... 

    public static int CompareByMyString(MyClass x, MyClass y) 
    { 
     return String.Compare(x.myString, y.myString); 
    } 
} 

並將其提供給List.Sort

myList.Sort(MyClass.CompareByMyString); 
+0

忘了提IM限於.NET 2.0的原因IM單聲道團結工作,這似乎是.NET 3.5最早的 – user1711383 2013-03-06 14:38:33

+1

@ user1711383:我已經添加了一個使用List.Sort的替代方案,它也應該可以與.net 2.0一起使用。 – Heinzi 2013-03-06 14:43:06

0

可以繼承IComparable的。這方面的一個例子是:

public class MyClass : IComparable 
    { 
     public int Day { get; set; } 
     public int Hour { get; set; } 

     public int CompareTo(object obj) 
     { 
      if (obj is MyClass) 
      { 
       MyClass slot = (MyClass)obj; 

       if (Day < slot.Day) 
       { 
        return -1; 
       } 
       else if (Day > slot.Day) 
       { 
        return 1; 
       } 
       else 
       { 
        if (Hour < slot.Hour) 
        { 
         return -1; 
        } 
        else if (Hour > slot.Hour) 
        { 
         return 1; 
        } 
        else 
        { 
         return 0; 
        } 
       } 
      } 
      else 
      { 
       throw new ArgumentException("Object is not MyClass"); 
      } 
     } 

     public override int GetHashCode() 
     { 
      unchecked 
      { 
       return Day.GetHashCode()^Hour.GetHashCode(); 
      } 
     } 

     public override bool Equals(object obj) 
     { 
      if (obj is MyClass) 
      { 
       return this == (MyClass)obj; 
      } 
      else 
      { 
       throw new ArgumentException("Object is not MyClass"); 
      } 
     } 

     public static bool operator ==(MyClass a, MyClass b) 
     { 
      return a.CompareTo(b) == 0; 
     } 

     public static bool operator !=(MyClass a, MyClass b) 
     { 
      return a.CompareTo(b) != 0; 
     } 

     public static bool operator <(MyClass a, MyClass b) 
     { 
      return a.CompareTo(b) < 0; 
     } 

     public static bool operator >(MyClass a, MyClass b) 
     { 
      return a.CompareTo(b) > 0; 
     } 

     public static bool operator <=(MyClass a, MyClass b) 
     { 
      return a.CompareTo(b) <= 0; 
     } 

     public static bool operator >=(MyClass a, MyClass b) 
     { 
      return a.CompareTo(b) >= 0; 
     } 
    } 

然後,你可以這樣做:

List<MyClass> listOfStuff = new List<MyClass>();} 
// Add some stuff to the list E.G. 
listOfStuff.add(new MyClass()); 
// Sort the list 
listOfStuff.sort();