C# 3.0 使用Lambda表达式的IComparer p类{ 公共字符串名称{get;set;} 公共整数{get;set;} }; 静态列表
ll=新列表 { 新的p{Name=“Jabc”,年龄=53},新的p{Name=“Mdef”,年龄=20}, 新的p{Name=“Exab”,年龄=45},新的p{Name=“G123”,年龄=19} }; 受保护的静态无效排序列表() {C# 3.0 使用Lambda表达式的IComparer p类{ 公共字符串名称{get;set;} 公共整数{get;set;} }; 静态列表,c#-3.0,C# 3.0,ll=新列表 { 新的p{Name=“Jabc”,年龄=53},新的p{Name=“Mdef”,年龄=20}, 新的p{Name=“Exab”,年龄=45},新的p{Name=“G123”,年龄=19} }; 受保护的静态无效排序列表() { IComparermycompare=(x,y)=>x.Name.CompareTo(y.Name);x.Name.CompareTo(y.Name));IComparer是一个接口,而不是委托 您希望在其.CompareTo()上使用lambda表达式,
IComparermycompare=(x,y)=>x.Name.CompareTo(y.Name);x.Name.CompareTo(y.Name));IComparer是一个接口,而不是委托 您希望在其.CompareTo()上使用lambda表达式,而不是在接口本身上。执行
ll.Sort((x,y)=>x.Name.CompareTo(y.Name));
它使用重载进行比较,而不是IComparer
比较
是一个委托,因此您可以为它使用lambda表达式
Comparisonmycop=(x,y)=>x.Name.comparieto(y.Name);
将起作用。使用以下简单类:
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)
}
公共静态类比较功能
{
类比较器:比较器
{
比较——比较;
公共比较器(比较)
{
_比较=比较;
}
公共覆盖整型比较(TX,TY)
{
返回-比较(x,y);
}
}
公共静态IComparer FromComparison(比较)
{
返回新的比较器(比较);
}
}
您可以参考现有的解决方案:
这一个使用.NET Framework 4.5中引入的Comparer.Create。比较定义在哪里/如何定义?@duluca它在
系统命名空间中定义为公共委托整数比较(tx,ty)
(减去.NET 4之前版本中中的)。它被记录在案。CompareTo()
是特定于区域性的比较。类似于ll.sort((x,y)=>String.CompareOrdinal(x.Name,y.Name))
可能更适合您。我喜欢如何在我的场景中提升准确的mycomp定义:)@RyanKirkman您希望根据基本UTF-16代码单元的数值比较两个Name
s的频率是多少?通常,在对“Name”排序时你使用与上下文相关的字母表,这确实是特定于文化的。这是一个很好的字母表:)
public static class ComparerUtilities
{
class _Comparer<T> : Comparer<T>
{
Comparison<T> _comparison;
public _Comparer(Comparison<T> comparison)
{
_comparison = comparison;
}
public override int Compare(T x, T y)
{
return _comparison(x, y);
}
}
public static IComparer<T> FromComparison<T>(Comparison<T> comparison)
{
return new _Comparer<T>(comparison);
}
}