2010-05-04 33 views
2

我有對象的集合,我知道我可以通過名稱(string類型)說如何使用Lambda表達式對對象內的INTEGERS進行排序?

collEquipment.Sort((x, y) => string.Compare(x.ItemName, y.ItemName)); 

的作品進行排序。

但我想通過ID(整型)進行排序,並沒有這樣的事情Int32.Compare

那麼,如何做到這一點?這是行不通的

collEquipment.Sort((x, y) => (x.ID < y.ID)); //error 

我知道答案會非常簡單。 Lambda表達式讓我困惑。

+0

語言是C#嗎? – Thomas 2010-05-04 15:33:48

回答

7

試試這個

collEquipment.Sort((x, y) => y.ID - x.ID); 
+3

可能有一些大數字的環繞問題 – 2010-05-04 16:01:45

+0

偉大的作品,謝謝!它只是一個數據庫中的項目ID ..所以不會太大 – punkouter 2010-05-04 16:07:11

+0

@Marc Gravell - 我想這對於任何方法都是一樣的嗎? – SysAdmin 2010-05-04 16:07:19

13
collEquipment.Sort((x, y) => y.ID.CompareTo(x.ID)); 
+1

*爲什麼這個工作原理的簡短解釋是Sort不接受一個小於運算符 - 它需要一個「比較器」運算符,如果x> y則返回<0 if x 0,如果x == y則返回0。所以它總是期望一個整數結果,而不是一個布爾值。 int上的CompareTo()方法在這種模式下返回<0, 0, or > 0,所以儘管使用if-else也會起作用(如果(x.ID y.ID)返回1;否則返回0;)。 – 2012-10-06 03:30:47

7

在這裏,你走了,不大不小的打擊,實現IComparable[<T>]任何屬性列表(int做):

public static class ListExtensions { 
    public static void Sort<TSource, TValue>(
     this List<TSource> list, 
     Func<TSource, TValue> selector) { 
     list.Sort((x,y) => Comparer<TValue>.Default 
      .Compare(selector(x),selector(y))); 
    } 
} 

現在:

collEquipment.Sort(x => x.ItemName); 

collEquipment.Sort(x => x.ID); 
相關問題