Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengklon Dalam Kamus Generik .NET?

Bagaimana untuk Mengklon Dalam Kamus Generik .NET?

DDD
DDDasal
2024-12-30 16:46:13780semak imbas

How to Deep Clone a .NET Generic Dictionary?

Pengklonan Dalam Kamus Generik .NET

Mengklon kamus generik .NET adalah penting apabila anda ingin mengekalkannya data tanpa mengubah yang asal. Panduan ini meneroka amalan terbaik untuk pengklonan dalam Kamus.

Pengklonan Cetek vs. Dalam

Salinan cetek mencipta kamus baharu yang merujuk objek asal dalam kamus sumber, manakala salinan dalam mencipta objek baharu. Dalam kes ini, anda mahukan salinan yang mendalam untuk memastikan bahawa sebarang perubahan yang dibuat pada kamus yang disalin tidak menjejaskan kamus asal.

Penyelesaian Berasaskan LINQ

Jika anda' menggunakan semula .NET 3.5 atau lebih baru, kaedah LINQ ToDictionary menyediakan penyelesaian yang mudah untuk pengklonan dalam:

var newDictionary = oldDictionary.ToDictionary(entry => entry.Key, entry => (T)entry.Value.Clone());

Ini pendekatan mencipta kamus baharu dengan pasangan nilai kunci yang diklon. Walau bagaimanapun, jika T tidak melaksanakan ICloneable, anda boleh menggunakan tugasan nilai mudah:

var newDictionary = oldDictionary.ToDictionary(entry => entry.Key, entry => entry.Value);

Penyelesaian Pengklonan Tersuai

Anda juga boleh melaksanakan kaedah pengklonan tersuai yang menggunakan pantulan untuk mencipta kejadian baharu bagi semua objek dalam kamus. Jika T melaksanakan ICloneable, anda boleh menggunakan kaedah berikut:

public static Dictionary<TKey, TValue> Clone<TKey, TValue>(Dictionary<TKey, TValue> original)
{
    var clonedDictionary = new Dictionary<TKey, TValue>();
    foreach (var entry in original)
        clonedDictionary.Add(entry.Key, (TValue)entry.Value.Clone());
    return clonedDictionary;
}

Atas ialah kandungan terperinci Bagaimana untuk Mengklon Dalam Kamus Generik .NET?. 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