Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menyusun Senarai Dengan Betul Menggunakan IComparer Tersuai dengan Linq OrderBy?

Bagaimana untuk Menyusun Senarai Dengan Betul Menggunakan IComparer Tersuai dengan Linq OrderBy?

Linda Hamilton
Linda Hamiltonasal
2025-01-01 04:11:10356semak imbas

How to Correctly Sort a List Using a Custom IComparer with Linq OrderBy?

Menggunakan IComparer Tersuai dengan Linq OrderBy

Masalah

Anda mempunyai Senarai generik di mana MyClass mengandungi sifat InvoiceNumber dengan nilai seperti 200906/1. Anda mahu menggunakan IComparer tersuai untuk mengisih senarai dalam susunan tertentu. Walau bagaimanapun, apabila menggunakan pembanding tersuai anda, senarai masih diisih dengan tidak betul.

Jawapan

Terdapat dua isu dalam kod anda:

  1. Pembanding tersuai yang anda berikan tidak mengisih nombor dengan betul. Anda harus menukar nilai InvoiceNumber kepada nombor dan mengisih berdasarkan nombor tersebut.
  2. Anda tidak mengemas kini BindingList dengan item yang disusun. Selepas mengisih senarai, anda perlu menetapkan senarai yang diisih kepada sifat Item pada BindingList.

Berikut ialah pembanding tersuai yang diperbetulkan:

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 String.Compare(stringA.ToString(), 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]));
        }
    }

}

Dan di sini ialah kod yang diperbetulkan untuk mengemas kini BindingList:

case ListSortDirection.Ascending:
    MyComparer comparer = new MyComparer();
    items = items.OrderByDescending(x => property.GetValue(x), comparer).ToList();
    break;
default:
    // Handle descending sort direction here
    break;
}

this.Items = items;

Atas ialah kandungan terperinci Bagaimana untuk Menyusun Senarai Dengan Betul Menggunakan IComparer Tersuai dengan Linq OrderBy?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn