2015-08-25 2 views
0

У меня есть список класса ниже типаглубокой копия список пользовательского класса

public class Class1 
{ 
    public string str1 { get; set; } 
    public string str2 { get; set; } 
    public int int1 { get; set; } 
    public double dbl1{get;set;} 
    public List<Class2> cls2 { get; set; } 
    public List<string> str3 { get; set; } 

} 

, в котором класс 2 является также определенным пользователем класса, как:

public class Class2 
{ 
    public string str4{ get; set; } 
    public Class3 cls2 { get; set; } 
} 

которого Class3 также является другой пользовательский класс. Мне нужно скопировать List<Class1> в другой список этого типа без ссылки на первый список.

Я использовал нижеследующие способы, но они не увенчались успехом.

  1. .CopyTo() к Class1[] массива, а затем .ToList() но держать ссылки
  2. .ToList() но держать ссылки
  3. Я использовал способы сериализации и deserializable но класс не может быть сериализации.
+0

Вам просто нужно написать метод. Опционально реализующий интерфейс IClonable. –

+0

Вы счастливы написать метод 'DeepClone()' (или реализовать Copy Constructor) для каждого класса? (Я бы избегал реализации «ICloneable», потому что он не указывает, является ли он глубоким или мелким - и [Microsoft рекомендует его не использовать] (https://msdn.microsoft.com/en-us/library/system. icloneable% 28v = vs.110% 29.aspx).) –

ответ

0

Необходимо использовать общий метод, который использует сериализацию, таким образом, вы можете легко добиться глубокого клонирования сложных объектов с хорошей ремонтопригодностью.

Обратитесь к следующим образом: How do you do a deep copy of an object in .NET (C# specifically)?

+0

Я использую serializable, но он не работает и не может сериализовать список. – virii

+0

затем добавьте свой код, который сделает это, пожалуйста, чтобы мы могли посмотреть –

+0

'public object DeepClone (object obj) { объект objResult = null; с использованием (MemoryStream ms = new MemoryStream()) { BinaryFormatter bf = new BinaryFormatter(); bf.Serialize (ms, obj); ms.Position = 0; objResult = bf.Deserialize (ms); } return objResult; } ' – virii

0

Я использую сериализации и десериализации метод из пакета NewtonSoft.Json и он работал хорошо.

Смежные вопросы