Rumah > pembangunan bahagian belakang > C++ > Bolehkah Ungkapan Lambda Digunakan Secara Terus dengan `Distinct()` dalam C#?

Bolehkah Ungkapan Lambda Digunakan Secara Terus dengan `Distinct()` dalam C#?

Patricia Arquette
Lepaskan: 2025-01-25 22:56:12
asal
776 orang telah melayarinya

kaedah Distinct() dan ekspresi lambda dalam C#: Eksplorasi kaedah alternatif

Kaedah pengembangan

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

Anda boleh menentukan kaedah lanjutan anda sendiri.

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

Inner Union iequlitycomparer

Walaupun mustahil untuk menentukan secara langsung
<code class="language-csharp">var distinctValues = myCustomerList.DistinctBy(customer => customer.CustomerId);</code>
Salin selepas log masuk
, anda boleh menggunakan kelas komparator tersuai sebagai kaedah perubahan:

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

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

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!

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