C# 带有比较委托的C自定义比较器
我正在尝试对自定义绑定列表进行排序。但是我遇到了一个问题,我的比较器不能识别类的属性。 无法识别x.Code_PK_原始值。奇怪的是,intellisense将Comparer类中的Begrenzingen标记为与下面第一个代码块中的Begrenzingen不同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
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);
}
}