Đây là một chức năng mà tôi đã sử dụng để sao chép các thành viên giữa các mô hình trong ASP.NET MVC. Trong khi bạn tìm kiếm mã hoạt động cho cùng một loại, mã này cũng sẽ hỗ trợ các loại khác có cùng thuộc tính.
Nó sử dụng phản xạ nhưng theo cách gọn gàng hơn. Hãy coi chừng Convert.ChangeType
: bạn có thể không cần nó; bạn có thể kiểm tra loại thay vì chuyển đổi.
public static TConvert ConvertTo<TConvert>(this object entity) where TConvert : new()
{
var convertProperties = TypeDescriptor.GetProperties(typeof(TConvert)).Cast<PropertyDescriptor>();
var entityProperties = TypeDescriptor.GetProperties(entity).Cast<PropertyDescriptor>();
var convert = new TConvert();
foreach (var entityProperty in entityProperties)
{
var property = entityProperty;
var convertProperty = convertProperties.FirstOrDefault(prop => prop.Name == property.Name);
if (convertProperty != null)
{
convertProperty.SetValue(convert, Convert.ChangeType(entityProperty.GetValue(entity), convertProperty.PropertyType));
}
}
return convert;
}
Do đây là một phương pháp khuyến nông, việc sử dụng rất đơn giản:
var result = original.ConvertTo<SomeOtherType>();
Nguồn
2010-08-10 03:36:21
Đây là những gì bạn đang tìm kiếm: [đối tượng Cloning trong C#] (https://stackoverflow.com/questions/ 78536/cloning-objects-in-c) –