Sınıf nesnesinin bir kopyasını referans olmadan nasıl oluşturabilirim? ICloneable
, bir sınıf nesnesinin bir kopyasını (sığ kopya yoluyla) yapar, ancak derin kopyalamayı desteklemez. Bir sınıf nesnenin tüm üyelerini okuyabilecek ve üye isimlerini belirtmeden başka bir nesneyi derinlemesine kopyalayabilecek kadar akıllı bir işlev arıyorum. Bir çözüm olarak bu gördüğümSınıf nesnesinin bir kopyası referans olmadan nasıl oluşturulur?
5
A
cevap
4
, temelde ICloneable derin bir kopyasını
public static T DeepCopy(T other)
{
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, other);
ms.Position = 0;
return (T)formatter.Deserialize(ms);
}
}
Ben bu konuyu başvuran ediyorum yapmıyor hakkında söylediklerini beri bunu yapmak için kendi fonksiyonunu yazın. copy a class, C#
0
public static object Clone(object obj)
{
object new_obj = Activator.CreateInstance(obj.GetType());
foreach (PropertyInfo pi in obj.GetType().GetProperties())
{
if (pi.CanRead && pi.CanWrite && pi.PropertyType.IsSerializable)
{
pi.SetValue(new_obj, pi.GetValue(obj, null), null);
}
}
return new_obj;
}
Sen ihtiyaçlarınıza ayarlayabilirsiniz. Örneğin,
if (pi.CanRead && pi.CanWrite &&
(pi.PropertyType == typeof(string) ||
pi.PropertyType == typeof(int) ||
pi.PropertyType == typeof(bool))
)
{
pi.SetValue(new_obj, pi.GetValue(obj, null), null);
}
VEYA
if (pi.CanRead && pi.CanWrite &&
(pi.PropertyType.IsEnum || pi.PropertyType.IsArray))
{
...;
}
[Klon Tüm Nesne Grafik] arasında
+0
Bu, bir şekilde, açıkça göremediğim şekilde, özendirici mi? –
İlgili konular
- 1. Referans olmadan bir nesnenin kopyası nasıl oluşturulur?
- 2. JavaScript'te bir File nesnesinin değiştirilmiş bir kopyası nasıl oluşturulur?
- 3. Klonlandığında bir sınıf nesnesinin kendi kopyası var olduğundan emin olun
- 4. Python jeneratör nesnesinin kopyası nasıl yapılır?
- 5. Yerel JS'yi kullanarak bir komut dosyasının tam kopyası nasıl oluşturulur?
- 6. nasıl Wollok bir sınıf oluşturulur?
- 7. Soyut sınıf için referans
- 8. Java generized sınıf referans
- 9. 'setContentView (R.layout.main)' olmadan bir etkinlik nasıl oluşturulur?
- 10. Kökler olmadan bir LXC konteyneri nasıl oluşturulur
- 11. foreach (alt sınıf) nesnesinin bir süper-sınıf listesinde görünmesi
- 12. Bu sınıf yönteminde sınıf örneği nasıl oluşturulur?
- 13. C# içinde bir alt sınıf nasıl oluşturulur?
- 14. F boş bir sınıf nasıl oluşturulur? F
- 15. Bir UIViewControl nesnesinin nib adını
- 16. Soyut sınıf C# nasıl oluşturulur?
- 17. XAML'de sınıf örneği nasıl oluşturulur?
- 18. bir kopyası Aralığı Expand
- 19. C++ 'da referans olarak bir sınıf nesnesi nasıl iade edilir?
- 20. Bir Sınıfın içeriğini diğer Sınıf ile nasıl referans alabilirim?
- 21. Sayfa yükleme olmadan düğme olayı nasıl oluşturulur?
- 22. Çıkışta javascript olmadan RMarkdown'dan HTML nasıl oluşturulur
- 23. Java'da uzantısı olmadan File nesnesinin adı nasıl alınır?
- 24. Sınıf nesnesinin davranışını aşırı yükleyebilir miyiz?
- 25. R: Referans Sınıfı Referans Sınıfı Alanlar Referans Sınıfı
- 26. SetInterval olmadan sınıf değişikliğini algılama
- 27. PHP: Başka bir sınıfın içinden argümanlarla bir sınıf nasıl oluşturulur
- 28. Statik bir iç sınıf yapıcıdan bir Spring bean nasıl oluşturulur?
- 29. Bir sınıf türü için bir OUTPUT typemap nasıl oluşturulur?
- 30. java'da genel bir sınıf için genel bir kurucu nasıl oluşturulur?
olası yinelenen (http://stackoverflow.com/questions/2417023/clone-whole-object-graph) – xanatos
Hızlı ve Kirli çözüm, nesneyi serileştirmek ve hemen başka bir nesneye serpmektir. Tabii ki, bu nesnenin düzgün bir şekilde serileştirilip geçirilemeyeceğine bağlıdır ... – canon