Как вы делаете глубокую копию объекта в .NET (C # конкретно)? [Дубликат]

545
задан Peter Mortensen 2 February 2017 в 21:38
поделиться

2 ответа

Я видел несколько разных подходов к этому, но я использую универсальный служебный метод как таковой:

public static T DeepClone<T>(T obj)
{
 using (var ms = new MemoryStream())
 {
   var formatter = new BinaryFormatter();
   formatter.Serialize(ms, obj);
   ms.Position = 0;

   return (T) formatter.Deserialize(ms);
 }
}

Примечания:

  • Ваш класс ДОЛЖЕН быть отмечен как [Serializable] для этого для работы.
  • Ваш исходный файл должен включать следующий код:

    using System.Runtime.Serialization.Formatters.Binary;
    using System.IO;
    
591
ответ дан Gilles 2 February 2017 в 21:38
поделиться

Основываясь на решении Килхоффера ...

С C # 3.0 вы можете создать метод расширения следующим образом:

public static class ExtensionMethods
{
    // Deep clone
    public static T DeepClone<T>(this T a)
    {
        using (MemoryStream stream = new MemoryStream())
        {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(stream, a);
            stream.Position = 0;
            return (T) formatter.Deserialize(stream);
        }
    }
}

, который расширяет любой класс, помеченный как [Serializable], с помощью метода DeepClone

MyClass copy = obj.DeepClone();
164
ответ дан 22 November 2019 в 22:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: