C# 如何使用Lambda表达式对对象内的整数进行排序?

C# 如何使用Lambda表达式对对象内的整数进行排序?,c#,collections,lambda,C#,Collections,Lambda,我有一个对象集合,我知道我可以按名称(字符串类型)排序 collEquipment.Sort((x, y) => string.Compare(x.ItemName, y.ItemName)); 这很有效 但我想按ID(整数类型)排序,而不存在Int32这样的东西 那我该怎么做呢?这不管用 collEquipment.Sort((x, y) => (x.ID < y.ID)); //error collEquipment.Sort((x,y)=>(x.ID0或a。对其工作

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

collEquipment.Sort((x, y) => string.Compare(x.ItemName, y.ItemName));
这很有效

但我想按ID(整数类型)排序,而不存在Int32这样的东西

那我该怎么做呢?这不管用

collEquipment.Sort((x, y) => (x.ID < y.ID));  //error
collEquipment.Sort((x,y)=>(x.ID
我知道答案很简单。Lambda的表达让我困惑

试试这个

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

现在,根据实现
IComparable[]
的任何属性对列表进行排序(这是
int
所做的):


可能有一些非常大数量的环绕问题伟大的作品谢谢!它只是数据库中项目的ID。。所以不会太大你不应该用
-
来实现CompareTo-它不起作用(溢出问题等)@punkouter:他用减法来实现CompareTo,这是有缺陷的。请参阅。@punkouter:sort func需要返回一个0、>0或a。对其工作原理的简短解释是,排序不使用小于运算符-它使用一个返回y的“comparator”运算符,如果x==y,则返回0。所以它总是期望一个整数结果,而不是布尔值。int上的CompareTo()方法在此模式中返回0,因此您可以使用它简洁地解决问题,尽管使用if-else也可以(if(x.IDy.ID)返回1;else返回0;)。
collEquipment.Sort((x, y) => y.ID.CompareTo(x.ID));
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);