Ответ 1
Как я понимаю, OP не хочет клонировать person2 в новый экземпляр Person, но просит, как скопировать содержимое person2 в уже существующий экземпляр (person1) Человек. Существует перегрузка метода AutoMapper Mapper.Map, который делает это для вас:
Mapper.CreateMap<Person, Person>();
Mapper.Map<Person, Person>(person2, person1);
//This copies member content from person2 into the _existing_ person1 instance.
Примечание 1: @alexl answer создает новый экземпляр Person. Если у вас есть другие ссылки на экземпляр, на который указывает person1, они не получат (предположительно) желаемое обновление данных, если вы перенаправите переменную person1 в новый экземпляр.
Примечание 2:. Вы должны знать, что (рекурсивная) глубина копирования зависит от того, какие отображения AutoMapper знают в момент отображения!
Если член класса Person говорит о классе Brain, и вы дополнительно сделали Mapper.CreateMap<Brain, Brain>();
перед вызовом копии Mapper.Map<Person, Person>(person2, person1);
, тогда person1 сохранит свой текущий экземпляр Brain, но этот Brain получит значения члена person2. Экземпляр Brain, У вас есть глубокая копия.
Но если AutoMapper не имеет отображения Brain-Brain перед копированием, член person1 Brain будет ссылаться на тот же экземпляр Brain, что и на ссылку one person2. То есть вы получите мелкую копию.
Это применяется рекурсивно ко всем членам, поэтому лучше убедиться, что AutoMapper имеет сопоставления для классов-членов, которые вы хотите выполнить глубокой копией, и не имеет сопоставлений для классов-членов, которые вы хотите поместить в мелкую копию.
Альтернативой использованию AutoMapper будет использование подхода, использующего отражение. (Обратите внимание, что код в ссылке делает мелкую копию!)
"Поддержка добавления существующего объекта вместо AutoMapper, создающего сам объект назначения" была добавлена в AutoMapper версии 0.2.