Lo que quiere decir es:
"Si tiene dos clases que comparten la mayor parte de las mismas propiedades que puede convertir un objeto de la clase a
a clase b
y automáticamente hacer que el sistema comprender la asignación a través de la compartida nombres de propiedad? "
Opción 1: Uso de reflexión
Desventaja: Se te va lento hacia abajo más de lo que cree.
Opción 2: Haz que una clase se derive de otra, la primera con propiedades comunes y otra con una extensión de eso.
Desventaja: ¡acoplado! ¡Si estás haciendo eso para dos capas en tu aplicación, entonces las dos capas estarán acopladas!
Pero no hay que:
class customer
{
public string firstname { get; set; }
public string lastname { get; set; }
public int age { get; set; }
}
class employee
{
public string firstname { get; set; }
public int age { get; set; }
}
Ahora aquí es una extensión para el tipo de objeto:
public static T Cast<T>(this Object myobj)
{
Type objectType = myobj.GetType();
Type target = typeof(T);
var x = Activator.CreateInstance(target, false);
var z = from source in objectType.GetMembers().ToList()
where source.MemberType == MemberTypes.Property select source ;
var d = from source in target.GetMembers().ToList()
where source.MemberType == MemberTypes.Property select source;
List<MemberInfo> members = d.Where(memberInfo => d.Select(c => c.Name)
.ToList().Contains(memberInfo.Name)).ToList();
PropertyInfo propertyInfo;
object value;
foreach (var memberInfo in members)
{
propertyInfo = typeof(T).GetProperty(memberInfo.Name);
value = myobj.GetType().GetProperty(memberInfo.Name).GetValue(myobj,null);
propertyInfo.SetValue(x,value,null);
}
return (T)x;
}
Ahora que lo utilice como esto:
static void Main(string[] args)
{
var cus = new customer();
cus.firstname = "John";
cus.age = 3;
employee emp = cus.Cast<employee>();
}
Método elenco cheques propiedades comunes entre dos objetos y hace la asignación automáticamente.
Este código no tiene sentido. Código postal que compila (no es el reparto, ese es el problema). –
Bastante duro ... Perder una palabra clave 'clase' no quita el sentido. – nawfal
Ya existen bibliotecas de mapeadores ligeras ya escritas para este propósito. Manejan mucho más casos extremos. Puedes googlearlo – nawfal