Po pierwsze, prawdopodobnie wszyscy zgadzają się, że najlepszym sposobem byłoby zaimplementowanie funkcji kopiowania wewnątrz niestandardowego obiektu/obiektu. Ale rozważ ten scenariusz. Nie mamy tej opcji i nie chcemy pisać konkretnej funkcji, która będzie dokładną kopią encji, ponieważ jednostka zostanie zmieniona w przyszłości, więc nasza funkcja kopiowania zakończy się niepowodzeniem.Najszybszy sposób kopiowania dynamicznego obiektu, który nie obsługuje funkcji kopiowania
Tutaj jest uproszczona wersja bieżącej jednostki:
[Serializable]
class MyEntity
{
public MyEntity()
{
}
public MyEntity(int id, string name)
{
this.Id = id;
this.Name = name;
}
public int Id { get; set; }
public string Name { get; set; }
public MyEntity Copy()
{
throw new NotImplementedException();
}
}
by sprostać wszystkim wymaganiom powyżej wymyśliłem dwa rozwiązania:
//original...
MyEntity original = new MyEntity() { Id = 1, Name = "demo1" };
//first way to copy object...
List<MyEntity> list = new List<MyEntity>() { original};
MyEntity copy1 = list.ConvertAll(entity => new MyEntity(entity.Id, entity.Name))[0];
//second way to copy object...
byte[] bytes = SerializeEntity(original);
MyEntity copy2 = (MyEntity)DeserializeData(bytes);
byte[] SerializeEntity(object data)
{
byte[] result = null;
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, data);
result = ms.ToArray();
}
return result;
}
object DeserializeData(byte[] data)
{
object result = null;
using(MemoryStream ms = new MemoryStream(data))
{
BinaryFormatter formatter = new BinaryFormatter();
result = formatter.Deserialize(ms);
}
return result;
}
i teraz pytanie. Jakie rozwiązanie jest najbardziej optymalne dla sceny i dlaczego, pierwsze czy drugie? Czy istnieje lepszy sposób na wykonanie dokładnej kopii uwzględniającej powyższe wymagania? Kopie będą wykonywane w dużych ilościach.
PS uwaga: Zdaję sobie sprawę, że pierwszy z nich jest w zasadzie już funkcji kopiowania jako Honza zauważył. W pewnym sensie poszukuję czegoś uniwersalnego, jak seryjna i szybka jak niestandardowa funkcja kopiowania.
Przeczytałem kilka postów na temat AutoMappera, ale nie mogłem wywnioskować z tego, co można zrobić w moim przypadku. Niektórzy twierdzą, że nie jest to najlepsze rozwiązanie we wszystkich przypadkach. Czy mógłbyś zaproponować jakieś wskazówki, które mogą skutkować złym działaniem przy użyciu AutoMappera? +1 dla alternatywy w tej chwili –