Questa è una funzione utilizzata per copiare membri tra i modelli in ASP.NET MVC. Mentre si cerca un codice che funzioni per lo stesso tipo, questo codice supporterà anche altri tipi che hanno le stesse proprietà.
Utilizza i riflessi, ma in modo più pulito. Attenzione allo Convert.ChangeType
: potresti non averne bisogno; potresti fare un controllo sul tipo invece di convertirlo.
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;
}
Poiché si tratta di un metodo di estensione, l'utilizzo è semplice:
var result = original.ConvertTo<SomeOtherType>();
fonte
2010-08-10 03:36:21
Questo è quello che stai cercando: [oggetti clonazione in C#] (https://stackoverflow.com/questions/ 78536/cloning-objects-in-c) –