【发布时间】:2012-11-15 16:17:10
【问题描述】:
我正在尝试使用 lambda 表达式对列表的一部分进行排序,但尝试这样做时出现错误:
List<int> list = new List<int>();
list.Add(1);
list.Add(3);
list.Add(2);
list.Add(4);
// works fine
list.Sort((i1, i2) => i1.CompareTo(i2) );
// "Cannot convert lambda expression to type 'System.Collections.Generic.IComparer<int>' because it is not a delegate type"
list.Sort(1, 2, (i1, i2) => i1.CompareTo(i2) );
foreach (int i in list)
Console.WriteLine(i);
猜测这是因为没有 System.Comparison 重载用于采用范围的排序。是否出于任何特殊原因而省略了?
有没有一种简单的方法可以从 lambda 表达式中获取合适的 IComparer(比如我可以用来转到 list.Sort(1, 2, new CompareyThing<int>((...) => ...)) 或其他东西的类)?
【问题讨论】:
-
我可能是个彻头彻尾的笨蛋,但我不明白你想用
list.Sort(1, 2, (i1, i2) => i1.CompareTo(i2) );完成什么。你能详细说明一下吗? -
整数仅用于示例目的。在我的实际代码中,我试图比较一个类的 int 属性。
-
您可以使用以下代码
list.Sort(new Comparison<int>((i1, i2) => i1 - i2));
标签: c# list sorting delegates lambda