Копирование (клонирование) объектов в C#
В .NET, как выяснилось, нет встроенной возможности получить копию объекта. Один из способов — использование сериализации.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace CrispStudio.Routine.Clone
{
public static class ObjectCloner
{
public static T DeepClone<T>(T source) where T : class
{
MemoryStream stream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, source);
stream.Position = 0;
return (T)formatter.Deserialize(stream);
}
}
}
Пример использования:
SomeCustomClass objectCopy = ObjectCloner.DeepClone(objectSource);
Минус решения: используется сериализация, значит объект должен быть сериализуемым (и должен иметь аттрибут [Serializable]).
Способ найден в Google-группе AutoMapper'a и, как подсказали в ответах, переделан на использование generic'ов.
