Was er sagen will, ist:
„Wenn Sie zwei Klassen haben, die meisten die gleichen Eigenschaften teilen können Sie ein Objekt aus der Klasse a
Klasse werfen b
und automatisch das System verstehen, die Zuordnung über den gemeinsamen Eigenschaftsnamen? "
Option 1: Verwenden Reflexion
Nachteil: Es wird Sie gonna mehr verlangsamen, als Sie denken.
Option 2: Machen Sie eine Klasse von einer anderen ableiten, die erste mit gemeinsamen Eigenschaften und andere eine Erweiterung davon.
Nachteil: Gekoppelt! Wenn Sie das für zwei Schichten in Ihrer Anwendung tun, werden die beiden Schichten gekoppelt!
Es werde:
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; }
}
hier Jetzt ist eine Erweiterung für Objekttyp:
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;
}
Jetzt verwenden Sie es wie folgt aus:
static void Main(string[] args)
{
var cus = new customer();
cus.firstname = "John";
cus.age = 3;
employee emp = cus.Cast<employee>();
}
Gussverfahren prüft gemeinsame Eigenschaften zwischen zwei Objekten und führt die Zuweisung automatisch durch.
Dieser Code macht keinen Sinn. Postcode, der kompiliert (es ist nicht die Besetzung, die das Problem ist). –
Ziemlich hart .. Das Fehlen eines 'class' Schlüsselworts nimmt den Sinn nicht weg. – nawfal
Es gibt bereits existierende Lightweight-Mapper-Bibliotheken, die für genau diesen Zweck geschrieben wurden. Sie behandeln viel mehr Randfälle. Sie können es googeln. – nawfal