Streamlining Linq's dengan Lambdas: Pemikiran Wishful? Distinct
adalah ruji untuk bekerja dengan Enumerables. Walau bagaimanapun, menentukan perbandingan kesamaan tersuai untuk operasi yang berbeza sering memerlukan menggunakan Distinct
, yang boleh merasakan terlalu banyak. Beban berasaskan Lambda, seperti contoh hipotetikal ini, akan lebih ringkas lagi: IEqualityComparer
<code class="language-csharp">var distinctValues = myCustomerList.Distinct((c1, c2) => c1.CustomerId == c2.CustomerId);</code>
alternatif praktikal untuk berasaskan lambda Distinct
1. Pendekatan dan GroupBy
: Select
kepada elemen kumpulan berdasarkan kunci (mis., GroupBy
), kemudian memilih elemen pertama dari setiap kumpulan. Ini berkesan menapis pendua. CustomerId
<code class="language-csharp">IEnumerable<Customer> distinctCustomers = originalList .GroupBy(customer => customer.CustomerId) .Select(group => group.First());</code>
2. Melaksanakan : IEqualityComparer<T>
menyediakan penyelesaian yang lebih mantap dan selamat jenis. Ini membolehkan logik kod kesamaan dan hash yang jelas berdasarkan kriteria khusus anda. Ini biasanya kaedah pilihan untuk mengekalkan dan prestasi. IEqualityComparer<T>
3. (Sangat tidak digalakkan) Perbandingan berasaskan refleksi:
Menggunakan refleksi untuk membandingkan objek berdasarkan sifat adalah sangat tidak cekap dan rawan ralat. Elakkan pendekatan ini melainkan benar -benar diperlukan.
Alasan yang mendasari ketiadaan Lambda-Only Overload:
Seperti yang dicatatkan oleh Anders Hejlsberg, lambda sahaja tidak mencukupi untuk operasi. Untuk tingkah laku yang konsisten, objek yang dianggap sama dengan perbandingan juga mesti menghasilkan kod hash yang sama. Distinct
memastikan konsistensi ini dengan memerlukan pelaksanaan kedua -dua IEqualityComparer
dan Equals
. GetHashCode
Atas ialah kandungan terperinci Bolehkah Ekspresi Lambda Memudahkan Kaedah Berbeza Linq untuk Perbandingan Kesaksamaan Custom?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!