C# 3.0 使用Lambda表达式的IComparer p类{ 公共字符串名称{get;set;} 公共整数{get;set;} }; 静态列表

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表达式,

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表达式,而不是在接口本身上。

执行
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);
    }
}