使用Lambda表达式的I比较器 [英] IComparer using Lambda Expression

查看:12
本文介绍了使用Lambda表达式的I比较器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 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>As参数。它与lambda一起工作 如第2行所示。但当我尝试执行第1行中的操作时,收到以下错误:

无法将lambda表达式转换为 类型 System.Collections.Generic.ICompeller‘ 因为它不是委托类型

我对此调查了很长时间,但我还是不明白。可能是我对比较器的理解不是很好。有人能帮我一下吗?

推荐答案

当您执行ll.Sort((x, y) => x.Name.CompareTo(y.Name));时,它对Comparison<T>使用重载,而不是IComparerComparison<T>是委托,因此可以对其使用lambda表达式。

Comparison<p> mycomp = (x, y) => x.Name.CompareTo(y.Name);将起作用。

这篇关于使用Lambda表达式的I比较器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆