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)
}
Run Code Online (Sandbox Code Playgroud)
这里List.sort需要一个IComparer<p>as参数.并且它与lambda一起使用,如第2行所示.但是当我尝试按照第1行的方式执行时,我收到此错误:
无法将lambda表达式转换为System.Collections.Generic.IComparer类型,因为它不是委托类型
我调查了很长一段时间,但我仍然不明白.也许我对IComparer的理解不是很好.可以有人帮我一把吗?
sep*_*p2k 19
当你这样做时ll.Sort((x, y) => x.Name.CompareTo(y.Name));,使用重载Comparison<T>,而不是IComparer.Comparison<T>是一个委托,所以你可以使用lambda表达式.
Comparison<p> mycomp = (x, y) => x.Name.CompareTo(y.Name); 将工作.
小智 5
您可以参考现有的解决方案:https://stackoverflow.com/a/16839559/371531
这个使用.NET Framework 4.5中引入的Comparer <T> .Create.
| 归档时间: |
|
| 查看次数: |
15079 次 |
| 最近记录: |