本文中,我們將探討如何利用自訂IComparer
所呈現的場景涉及一個通用列表,其中包含 InvoiceNumber 屬性格式為「200906/1」的物件。目標是根據考慮 InvoiceNumber 屬性內的數值的自訂排序邏輯對此清單進行排序。
最初,自訂 IComparer
更正後的MyComparer 實作如下:
public class MyComparer : IComparer<Object> { public int Compare(Object stringA, Object stringB) { string[] valueA = stringA.ToString().Split('/'); string[] valueB = stringB.ToString().Split('/'); if (valueA.Length != 2 || valueB.Length != 2) { return stringA.ToString().CompareTo(stringB.ToString()); } // Note: do error checking and consider i18n issues too :) if (valueA[0] == valueB[0]) { return int.Parse(valueA[1]).CompareTo(int.Parse(valueB[1])); } else { return int.Parse(valueA[0]).CompareTo(int.Parse(valueB[0])); } } }
ApplySortCore方法被修改為利用Mylistarer:
case ListSortDirection.Ascending: MyComparer comparer = new MyComparer(); items = items.OrderByDescending( x => property.GetValue(x), comparer).ToList(); break;
最後,確保排序列表中反映在綁定列表中,更新的items 集合必須指派給Items 屬性:
this.Items = items;
以上是如何使用自訂 IComparer 和 LINQ OrderBy 對清單進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!