Rumah >pembangunan bahagian belakang >C++ >Mengapa Kaedah Distinct LINQ Tidak Cekap dengan Objek Tersuai, dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Kaedah Distinct LINQ Tidak Cekap dengan Objek Tersuai, dan Bagaimana Saya Boleh Membetulkannya?

Susan Sarandon
Susan Sarandonasal
2025-01-20 19:32:12526semak imbas

Why is LINQ's Distinct Method Inefficient with Custom Objects, and How Can I Fix It?

Mengatasi Ketidakcekapan Kaedah Berbeza LINQ untuk Objek Tersuai

Kaedah

LINQ Distinct() boleh menjadi tidak cekap apabila digunakan dengan objek tersuai. Ini kerana, secara lalai, ia bergantung pada kesamaan rujukan—bermaksud ia hanya menganggap dua objek berbeza jika ia menduduki lokasi memori yang berbeza. Objek yang sama (dengan nilai sifat yang sama) akan dianggap sebagai entiti yang berasingan, yang membawa kepada hasil pendua.

Penyelesaian terletak pada melaksanakan antara muka IEquatable<T> dalam kelas objek tersuai anda. Ini membolehkan anda menentukan cara kesaksamaan ditentukan untuk objek anda, berdasarkan sifatnya dan bukannya alamat memorinya.

Berikut ialah pelaksana kelas Author yang dipertingkatkan IEquatable<Author>:

<code class="language-csharp">public class Author : IEquatable<Author>
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public bool Equals(Author other)
    {
        if (other is null) return false;
        return FirstName == other.FirstName && LastName == other.LastName;
    }

    public override int GetHashCode()
    {
        return HashCode.Combine(FirstName, LastName);
    }
}</code>

Dengan mengatasi kaedah Equals() dan melaksanakan GetHashCode(), anda memberikan Distinct() logik yang diperlukan untuk mengenal pasti dan mengalih keluar objek Author pendua berdasarkan sifat FirstName dan LastName dengan betul. Perhatikan penggunaan HashCode.Combine untuk penjanaan kod cincang yang lebih mantap. Ini memastikan bahawa objek yang dianggap sama oleh Equals() juga menghasilkan kod cincang yang sama. Dengan menggunakan pendekatan ini, Distinct() kini akan mengenal pasti dan mengalih keluar objek pengarang pendua berdasarkan namanya dengan tepat.

Atas ialah kandungan terperinci Mengapa Kaedah Distinct LINQ Tidak Cekap dengan Objek Tersuai, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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