我正试图使用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);
我猜这是因为在sort方法中没有针对范围的System.Comparison重载。这个重载被省略了,是否有特别的原因呢?
有没有一种简单的方法从Lambda表达式中获取合适的IComparer(就像一个可以直接使用的类,比如list.Sort(1, 2, new CompareyThing<int>((...) => ...))
)?
list.Sort(1, 2, (i1, i2) => i1.CompareTo(i2) );
实现什么。你能详细解释一下吗? - tmesserlist.Sort(new Comparison<int>((i1, i2) => i1 - i2));
。 - Andrey Burykin