Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membandingkan Sifat Objek dengan Cekap untuk Kesamaan dalam C#?

Bagaimanakah Saya Boleh Membandingkan Sifat Objek dengan Cekap untuk Kesamaan dalam C#?

Susan Sarandon
Susan Sarandonasal
2025-01-22 22:26:10476semak imbas

How Can I Efficiently Compare Object Properties for Equality in C#?

Membandingkan Sifat Objek dengan Cekap dalam C#

Artikel ini meneroka kaedah yang cekap untuk membandingkan sifat objek dalam C#. Cabaran biasa ialah menentukan sama ada dua objek daripada jenis yang sama mempunyai nilai sifat yang sama. Kami akan mengkaji pendekatan yang dipertingkatkan yang memanfaatkan kaedah LINQ dan sambungan.

Kaedah Perbandingan Harta Yang Dipertingkat

Kod C# berikut menyediakan penyelesaian yang diperhalusi untuk membandingkan sifat objek:

<code class="language-csharp">public static bool PublicInstancePropertiesEqual<T>(this T self, T to, params string[] ignore) where T : class
{
    if (self != null && to != null)
    {
        var type = typeof(T);
        var ignoreList = new List<string>(ignore);
        var unequalProperties =
            from pi in type.GetProperties(BindingFlags.Public | BindingFlags.Instance)
            where !ignoreList.Contains(pi.Name) && pi.GetUnderlyingType().IsSimpleType() && pi.GetIndexParameters().Length == 0
            let selfValue = type.GetProperty(pi.Name).GetValue(self, null)
            let toValue = type.GetProperty(pi.Name).GetValue(to, null)
            where selfValue != toValue && (selfValue == null || !selfValue.Equals(toValue))
            select selfValue;
        return !unequalProperties.Any();
    }
    return self == to;
}</code>

Kaedah ini menawarkan beberapa penambahbaikan utama:

  • Integrasi LINQ: Penggunaan LINQ memperkemas lelaran sifat, meningkatkan kebolehbacaan dan berpotensi meningkatkan prestasi berbanding gelung for tradisional.
  • Kaedah Sambungan: Dilaksanakan sebagai kaedah sambungan, ia membolehkan sintaks yang lebih ringkas dan lancar apabila membandingkan objek.
  • Pengesahan Jenis Mudah: Ia secara eksplisit menyemak sama ada sifat adalah jenis ringkas (cth., int, string, bool), menghalang kemungkinan ralat apabila berurusan dengan sifat objek kompleks. Ini mengelakkan masalah berulang.

Pendekatan yang dioptimumkan ini memastikan perbandingan sifat objek yang cekap dan boleh dipercayai sambil mengekalkan kejelasan dan kemudahan penggunaan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membandingkan Sifat Objek dengan Cekap untuk Kesamaan 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