Кажется логичным, но может быть немного неэффективно.Я полагаю, что рассматриваемый объект - просто простое poco.
Вы также можете использовать отражение, чтобы сделать это.
Этот код будет копировать свойства объекта и возвращать экземпляр новой копии.
public TTranslateTo TranslateTo<TTranslateTo>()
{
var target = Activator.CreateInstance<TTranslateTo>();
foreach (var p1 in GetObjectTypeProperties)
{
var p2 =
target.GetType()
.GetProperties()
.FirstOrDefault(p => string.Equals(p.Name, p1.Name, StringComparison.CurrentCultureIgnoreCase) && p.PropertyType == p1.PropertyType);
p2?.SetValue(target, p1.GetValue(this));
}
return target;
}
private IEnumerable<PropertyInfo> GetObjectTypeProperties => GetType()
.GetProperties();
Вы можете включить этот код в базовый класс, предоставляя вам доступ к функциям копирования всех объектов..