c#-3.0 - 使用 Lambda 表达式的 IComparer

标签 c#-3.0

 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> 的重载,不是IComparerComparison<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/

相关文章:

c# - 在 C# 中,为什么要使用表达式树以及何时需要使用它们?

c# - 2个C#类相互包含为成员

c# - 延迟执行和急切评估

c# - 关于线程/后台 worker 的问题

c# - 从 C# 调用对话窗口

c# - 彻底理解linq

c# - 在 C# 中将字符串解析为数组

c#-3.0 - 如何使用物理路径OpenWebConfiguration?

c# - 如何使用 LINQ 获取索引?

c# - 仅在 C# winforms 中的数据网格中单击鼠标后应用的属性