Perbezaan pengekstrakan senarai objek tersuai generik dalam C#
Andaikan anda mempunyai dua senarai, setiap satu mengandungi objek tersuai dan anda memerlukan cara untuk mendapatkan senarai ketiga yang hanya mengandungi item yang terdapat dalam senarai pertama tetapi tidak dalam elemen kedua.
Untuk tujuan ini, kaedah .Except()
adalah pilihan yang sesuai. Kaedah ini menganggap bahawa objek tersuai anda melaksanakan kaedah Equals
dan GetHashCode
, dengan itu menyediakan cara untuk mentakrifkan kesamaan objek. Menggunakan .Except()
adalah mudah:
<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>
Walau bagaimanapun, jika anda perlu mentakrifkan kesaksamaan tersuai berdasarkan sifat tertentu (seperti ID), anda boleh menentukan pelaksanaan IEqualityComparer<T>
. Pertimbangkan contoh berikut:
<code class="language-csharp">public class IdComparer : IEqualityComparer<CustomObject> { public int GetHashCode(CustomObject co) { if (co == null) { return 0; } return co.Id.GetHashCode(); } public bool Equals(CustomObject x1, CustomObject x2) { if (object.ReferenceEquals(x1, x2)) { return true; } if (object.ReferenceEquals(x1, null) || object.ReferenceEquals(x2, null)) { return false; } return x1.Id == x2.Id; } }</code>
Dalam kes ini, anda boleh menggunakan kod berikut untuk mendapatkan semula perbezaan antara dua senarai:
<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>
Untuk kes yang wujudnya pendua, pertimbangkan untuk mencipta set daripada senarai kedua dan gunakan kaedah berikut:
<code class="language-csharp">var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>
Ini akan memastikan pendua disimpan dalam senarai keputusan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencari Perbezaan Antara Dua Senarai Objek Tersuai dengan Cekap dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!