C# 带有比较委托的C自定义比较器

C# 带有比较委托的C自定义比较器,c#,delegates,comparison,C#,Delegates,Comparison,我正在尝试对自定义绑定列表进行排序。但是我遇到了一个问题,我的比较器不能识别类的属性。 无法识别x.Code_PK_原始值。奇怪的是,intellisense将Comparer类中的Begrenzingen标记为与下面第一个代码块中的Begrenzingen不同 BindingListX<Begrenzingen> lst = new BindingListX<Begr.....; lst.OrderBy(t => t, new CustomComparer<Be

我正在尝试对自定义绑定列表进行排序。但是我遇到了一个问题,我的比较器不能识别类的属性。 无法识别x.Code_PK_原始值。奇怪的是,intellisense将Comparer类中的Begrenzingen标记为与下面第一个代码块中的Begrenzingen不同

BindingListX<Begrenzingen> lst = new BindingListX<Begr.....;

lst.OrderBy(t => t, new CustomComparer<Begrenzingen>());


仅仅lst.OrderByt=>t.Code\u PK\u OriginalValue如何

您的类是什么样子的?为什么要使用额外的比较而不是实现Compare方法内部的逻辑?我将代码更改为public void OrderByFunc keySelector{this.Items.OrderBykeySelector;}和lst.OrderByt=>t.code_PK;。但这并没有对我的列表进行排序。这些项仍然按原始顺序排列。OrderBy实际上不会对列表进行排序,但会返回一个已排序的IEnumerable Use:lst=lst.OrderByt=>t.Code\u PK.ToList;
public class CustomComparer<Begrenzingen> : IComparer<Begrenzingen>
{
    private readonly Comparison<Begrenzingen> _comparison;

    public CustomComparer()
    {
        _comparison = new Comparison<Begrenzingen>(
                            (Begrenzingen x, Begrenzingen y) =>
                            {
                                return x.Code_PK_OriginalValue.CompareTo(y.Code_PK_OriginalValue);
                            }
                      );
    }

    public int Compare(Begrenzingen x, Begrenzingen y)
    {
        return _comparison(x, y);
    }
}
public class BindingListX<T> : BindingList<T>
{
    public void OrderBy(Func<T,T> keySelector, IComparer<T> comparer)
    {
        this.Items.OrderBy(keySelector, comparer);
    }
}
public class Begrenzingen : DefaultTable, IComparable<Begrenzingen>
{
    public Begrenzingen()
    { //New -> Insert DB
        Code_PK_OriginalValue = -1;
        isDeleted = false;
    }

    public decimal Code_PK_OriginalValue { get; set; }
    public decimal Code_PK { get; set; }
    public string Naam { get; set; }
    public decimal? SeqLayer { get; set; }

    public Boolean isDeleted { get; set; }

    public string SeqLayerDisplayValue { 
        get {
            if (SeqLayer == null) return string.Empty;
            return (from sdo in MainWindow.Main.SdoLayers where sdo.SeqLayer == this.SeqLayer select sdo.DisplayValue).First();
        } 
    }


    public override string ToString()
    {
        return String.Format("{0};{1};{2};{3}", Code_PK_OriginalValue, Code_PK, Naam, SeqLayer);
    }

    public int CompareTo(Begrenzingen o)
    {
        return Code_PK.CompareTo(o.Code_PK);
    }
}