Наскільки я розумію питання, OP не хоче клонувати person2 у новий екземпляр Person , але запитує, як скопіювати вміст person2 у вже існуючий екземпляр ( person1 ) Person . Існує перевантаження методу Mapper.Map AutoMapper, який робить це за вас:
Mapper.CreateMap<Person, Person>();
Mapper.Map<Person, Person>(person2, person1);
Примітка 1. Відповідь @ alexl створює новий екземпляр Person . Якщо у вас є інші посилання на екземпляр, на який вказує person1 , вони не отримають (імовірно) бажане оновлення даних, якщо ви перенаправите змінну person1 на новий екземпляр.
Примітка 2: Ви повинні пам’ятати, що (рекурсивна) глибина копіювання залежить від того, про що зіставлення AutoMapper знає на момент відображення!
Якщо член Person класу, скажімо , клас мозок , і ви додатково зробили Mapper.CreateMap<Brain, Brain>();
до копіювання даних Mapper.Map<Person, Person>(person2, person1);
виклику, то person1 збереже поточний мозок екземпляр , але це Brain буде приймати значення членів PERSON2 «и мозку , наприклад. Тобто у вас є глибока копія .
Але якщо у AutoMapper немає копіювання Brain-Brain перед копіюванням, тоді це Brain person1учасник буде посилатися на той самий мозку
Це застосовується рекурсивно до всіх членів, тому вам краще переконатися, що AutoMapper має зіставлення для класів-членів, які потрібно глибоко копіювати, і не має відображень для класів-членів, які потрібно неглибоко копіювати.як посилання на одну особу2 . Тобто ви отримаєте неглибоку копію .
Альтернативою використанню AutoMapper було б використання підходу з використанням відображення . (Зверніть увагу, що код у посиланні робить неглибоку копію!)
"Підтримка заповнення існуючого об'єкта, замість того, щоб AutoMapper створював сам об'єкт призначення", було додано до версії 0.2 AutoMapper .