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
Lepaskan: 2025-01-01 04:11:10
asal
328 orang telah melayarinya

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

}
Salin selepas log masuk

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;
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan