Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membandingkan Objek Bersarang Kompleks dengan Cekap dalam 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
Melaksanakan Iequatable
Untuk setiap jenis tersuai (termasuk objek akar Object1 dan Object2), laksanakan antara muka IEquatable
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
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!