Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membandingkan Objek Bersarang Kompleks dengan Cekap dalam C#?

Bagaimanakah Saya Boleh Membandingkan Objek Bersarang Kompleks dengan Cekap dalam C#?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-19 07:47:10104semak imbas

How Can I Efficiently Compare Complex Nested Objects in C#?

Bandingkan objek kompleks dengan cekap

Menentukan kesaksamaan boleh menjadi tugas yang memakan masa apabila berurusan dengan objek kompleks yang mengandungi berbilang lapisan sub-objek. Untuk mengoptimumkan proses ini dalam C# 4.0, cara yang paling berkesan ialah melaksanakan antara muka IEquatable dalam semua jenis tersuai.

Melaksanakan Iequatable

Untuk setiap jenis tersuai (termasuk objek akar Object1 dan Object2), laksanakan antara muka IEquatable untuk menyediakan perbandingan kesaksamaan tersuai. Ini termasuk mengatasi kaedah lalai Equals dan GetHashCode.

Timpa kaedah Equals

Dalam kaedah Equals, panggil kaedah Equals untuk semua sub-objek secara rekursif. Untuk koleksi yang terkandung, gunakan kaedah sambungan SequenceEqual untuk membandingkan elemen dengan cekap. Pastikan semua rujukan dikendalikan dengan betul untuk mengelakkan pengecualian rujukan nol.

Jenis nilai dan kesamaan rujukan

Untuk jenis nilai, hubungi kaedah Equals terus. Untuk jenis rujukan, kesamaan rujukan disemak terlebih dahulu menggunakan ReferenceEquals. Jika kesamaan rujukan tidak diwujudkan, semak sama ada medan atau sifat kejadian itu adalah batal dan kemudian teruskan memanggil kaedah Equals mereka.

Contoh

Pertimbangkan contoh ringkas dengan tiga peringkat sarang: Orang, Alamat dan Bandar. Kelas Orang melaksanakan IEquatable dan mempunyai logik perbandingan rekursif:

<code class="language-csharp">public class Person : IEquatable<Person>
{
    public int Age { get; set; }
    public string FirstName { get; set; }
    public Address Address { get; set; }

    public bool Equals(Person other)
    {
        return Age.Equals(other.Age) &&
               FirstName?.Equals(other.FirstName) == true &&
               Address?.Equals(other.Address) == true;
    }
}</code>

Pelaksanaan yang serupa boleh disediakan untuk kelas Alamat dan Bandar. Perhatikan penggunaan operator ?. untuk mengendalikan kemungkinan rujukan nol untuk mengelakkan pengecualian.

Kemas kini: Pengenalan dan Kesetaraan

Sila ambil perhatian bahawa penyelesaian yang disediakan menganggap perbandingan kesetaraan. Walau bagaimanapun, untuk jenis boleh ubah, mungkin lebih sesuai untuk melaksanakan IEquality berdasarkan identiti dan bukannya kesetaraan. Gunakan GetHashCode dengan berhati-hati untuk memastikan ia konsisten untuk objek yang disimpan dalam koleksi yang bergantung pada kod cincang.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membandingkan Objek Bersarang Kompleks dengan Cekap dalam C#?. 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