首頁 >後端開發 >C++ >如何使用自訂 IComparer 正確排序 LINQ OrderBy 中的物件?

如何使用自訂 IComparer 正確排序 LINQ OrderBy 中的物件?

Barbara Streisand
Barbara Streisand原創
2025-01-02 17:44:08714瀏覽

How Can I Use a Custom IComparer to Correctly Sort Objects in LINQ OrderBy?

使用自訂IComparer對於Linq OrderBy

問題:

您有一個物件列表,其屬性包含特定字串格式的發票編號,例如200906/1。 C# 中 Linq OrderBy 的預設排序會導致排序順序不理想,例如 200906/1、200906/10、200906/11。

解決方案:

To實作您自己的自訂排序順序,您可以定義一個IComparer介面實作。以下是範例實作:

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());
        }

        // Parse numbers for comparison
        int numA = int.Parse(valueA[0]);
        int numB = int.Parse(valueB[0]);
        if (numA == numB) 
        {
            return int.Parse(valueA[1]).CompareTo(int.Parse(valueB[1]));
        }
        else
        {
            return numA.CompareTo(numB);
        }
    }
}

在原始程式碼中,您嘗試在 Linq OrderBy 中使用 MyComparer,如下所示:

items = items.OrderByDescending(
  x => property.GetValue(x), comparer).ToList();

此方法不正確。使用比較器的正確語法是:

items = items.OrderBy(x => property.GetValue(x), comparer).ToList();

請注意,如果您希望按升序排序,則使用 OrderBy 方法而不是 OrderByDescending。

最後,不要忘記將排序後的項目分配回您的資料來源以反映 UI 中的變更:

this.Items = items;

以上是如何使用自訂 IComparer 正確排序 LINQ OrderBy 中的物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn