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