I’ve written a class with a single static method that copies property values from one object to another. It doesn’t care what type each object is, only that they have identical properties. It does what I need, so I’m not engineering it further, but what improvements would you make?
Here’s the code:
public class ShallowCopy { public static void Copy<From, To>(From from, To to) where To : class where From : class { Type toType = to.GetType(); foreach (var propertyInfo in from.GetType().GetProperties(BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance)) { toType.GetProperty(propertyInfo.Name).SetValue(to, propertyInfo.GetValue(from, null), null); } } }
I’m using it as follows:
EmployeeDTO dto = GetEmployeeDTO(); Employee employee = new Employee(); ShallowCopy.Copy(dto, employee);
Are your DTOs serializable? I would expect so, in which case:
But note that I don’t really agree with this general approach. I would prefer a strong contract for copying on your DTOs that each DTO implements.