如何使用Lambda表达式对对象内的INTEGERS进行排序?

pun*_*ter 2 c# collections lambda

我有一个对象的集合,我知道我可以按照NAME(字符串类型)排序

collEquipment.Sort((x, y) => string.Compare(x.ItemName, y.ItemName));
Run Code Online (Sandbox Code Playgroud)

这样可行.

但我想按ID(整数类型)排序,并且没有Int32.Compare这样的东西

那我该怎么做?这不起作用

collEquipment.Sort((x, y) => (x.ID < y.ID));  //error
Run Code Online (Sandbox Code Playgroud)

我知道答案很简单.Lambda的表达让我很困惑.

小智 14

collEquipment.Sort((x, y) => y.ID.CompareTo(x.ID));
Run Code Online (Sandbox Code Playgroud)


Mar*_*ell 8

在这里,您可以针对任何实现的属性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)));
    }
}
Run Code Online (Sandbox Code Playgroud)

现在:

collEquipment.Sort(x => x.ItemName);
Run Code Online (Sandbox Code Playgroud)

要么

collEquipment.Sort(x => x.ID);
Run Code Online (Sandbox Code Playgroud)


Sys*_*min 7

试试这个

collEquipment.Sort((x, y) => y.ID - x.ID);
Run Code Online (Sandbox Code Playgroud)

  • 可能有一些非常大的环绕问题 (3认同)
  • 你不应该使用`-`来实现CompareTo - 它不起作用(溢出问题等) (2认同)
  • @punkouter:sort func需要返回0,> 0或<0的结果.减去比较值将会(或多或少),但最好使用Int32.CompareTo()方法.所以用y.ID.CompareTo(x.ID)替换y.ID - x.ID,如下面JWL_所指出的那样. (2认同)