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

Bagaimana untuk Mengklon Dalam Kamus Generik .NET?

DDD
Lepaskan: 2024-12-30 16:46:13
asal
776 orang telah melayarinya

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());
Salin selepas log masuk

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);
Salin selepas log masuk

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;
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mengklon Dalam Kamus Generik .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan