class p {
public string Name { get; set; }
public int Age { get; set; }
};
static List<p> ll = new List<p>
{
new p{Name="Jabc",Age=53},new p{Name="Mdef",Age=20},
new p{Name="Exab",Age=45},new p{Name="G123",Age=19}
};
protected static void SortList()
{
IComparer<p> mycomp = (x, y) => x.Name.CompareTo(y.Name); <==(Line 1)
ll.Sort((x, y) => x.Name.CompareTo(y.Name));<==(Line 2)
}
这里 List.sort 需要 IComparer<p>
作为参数。它与 lambda 一起使用
如第 2 行所示。但是当我尝试按照第 1 行中的方式执行操作时,出现此错误:
Cannot convert lambda expression to type System.Collections.Generic.IComparer' because it is not a delegate type
我研究了很长一段时间,但我仍然不明白。也许我对 IComparer 的理解不太好。有人可以帮助我吗?
最佳答案
当你这样做时ll.Sort((x, y) => x.Name.CompareTo(y.Name));
它使用 Comparison<T>
的重载,不是IComparer
。 Comparison<T>
是一个委托(delegate),因此您可以为其使用 lambda 表达式。
Comparison<p> mycomp = (x, y) => x.Name.CompareTo(y.Name);
会起作用的。
关于c#-3.0 - 使用 Lambda 表达式的 IComparer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2893176/