Distinct()
dan ekspresi lambda dalam C#: Eksplorasi kaedah alternatif Distinct()
dalam System.Linq menyediakan kaedah yang mudah untuk menapis elemen pendua dari objek penghitungan. Walaupun ia boleh digunakan tanpa parameter dalam kes -kes yang mudah, ia memerlukan contoh IEqualityComparer
untuk menentukan setara objek. Ini mungkin menyusahkan, terutamanya apabila menggunakan ekspresi Lambda.
Adakah terdapat beban berat yang menerima ekspresi lambda? Berikut adalah kaedah pelaksanaan:
Distinct()
kaedah sambungan tersuai
Penggunaan:
<code class="language-csharp">public static IEnumerable<T> DistinctBy<T, TKey>(this IEnumerable<T> source, Func<T, TKey> keySelector) { return source.GroupBy(keySelector).Select(group => group.First()); }</code>
Inner Union iequlitycomparer
Walaupun mustahil untuk menentukan secara langsung<code class="language-csharp">var distinctValues = myCustomerList.DistinctBy(customer => customer.CustomerId);</code>
Penggunaan: IEqualityComparer
<code class="language-csharp">public class CustomerEqualityComparer : IEqualityComparer<Customer> { public bool Equals(Customer x, Customer y) { return x.CustomerId == y.CustomerId; } public int GetHashCode(Customer obj) { return obj.CustomerId.GetHashCode(); } }</code>
penjelasan Anders Hejlsberg c# pereka bahasa Anders Hejlsberg telah menyelesaikan masalah ini. Beliau menjelaskan bahawa menentukan re -muat semula ekspresi lambda secara teknikalnya mencabar, kerana jika objek berfungsi dengan baik dalam jadual hash dalaman, unsur -unsur yang sama mesti mempunyai intipati nilai yang sama
Oleh itu, mesti digunakan.<code class="language-csharp">var equalityComparer = new CustomerEqualityComparer(); var distinctValues = myCustomerList.Distinct(equalityComparer);</code>
Atas ialah kandungan terperinci Bolehkah Ungkapan Lambda Digunakan Secara Terus dengan `Distinct()` dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!