-
30.10.2016, 18:14 #1
Alle Eigenschaften eines Objektes in eine andere Instanz kopieren
Ich hatte letztens den Fall, dass ich die Eigenschaften (also öffentliche Propertys) eines Objektes in ein anderes, bereits existerendes Objekt kopieren musste. Clone() und ähnliches fiel damit weg. Das geht im neuen .NET Core nicht mehr wie bisher, weil der System.Reflection Namespace überarbeitet wurde, den man für mein Snippet auch einbinden muss. Trotzdem ist es noch recht schlank, wie die folgende Hilfsmethode zeigt:
T CopyAttributes<T>(T sourceObject, T targetObject) {
var typeInfo = sourceObject.GetType().GetTypeInfo();
foreach(var property in typeInfo.DeclaredProperties) {
if(property.CanWrite) {
var sourceValue = property.GetValue(sourceObject);
property.SetValue(targetObject, sourceValue);
}
}
return targetObject;
}
Beispiel
class MyClass {
public string A { get; set; }
public string B { get; set; }
}
Von der Klasse erstellt man zwei Instanzen
MyClass objectA = new MyClass() { A = "ABC" };
MyClass objectB = new MyClass();
CopyAttributes(objectA, objectB);
// objectB.A hat nun den Wert "ABC"
Die Schwierigkeit bestand im System.Reflections Namespace, da die Dokumentation für Core hier etwas dürftig ist und auch Intellisense das importieren des Namespace nicht vorschlägt, warum auch immer. Eventuell hilft es ja jemanden der das gleiche Problem hat
Im Krieg gibt es keine Gewinner, nur Verlierer!
-
The Following 2 Users Say Thank You to DotNet For This Useful Post:
-
04.11.2016, 02:59 #2
AW: Alle Eigenschaften eines Objektes in eine andere Instanz kopieren
Für eigene Typen würde ich allerdings einen Kopierkonstruktor vorziehen. Somit müsste man nicht über Reflections gehen, das fühlt sich immer an wie cheaten.
Edit:
Habe schon lange nicht mehr programmiert und von .NET habe ich sowieso kaum Ahnung, aber deine Methode macht doch "nur" flache Kopien und keine tiefen, oder?Geändert von Nuebel (04.11.2016 um 03:15 Uhr)
-
The Following User Says Thank You to Nuebel For This Useful Post:
Negok (04.11.2016)
Ähnliche Themen
-
Das eine sagen, das andere tun
Von Fritz im Forum ZwischenmenschlichesAntworten: 20Letzter Beitrag: 31.08.2021, 20:03 -
Alle Bilder eines Facebook-Accounts herunterladen
Von tolky99 im Forum Internet und TechnikAntworten: 18Letzter Beitrag: 20.12.2014, 17:00 -
Alle Prozesse eines Benutzers anhand seiner uid beenden
Von alexlinke im Forum LinuxAntworten: 1Letzter Beitrag: 19.08.2014, 18:04 -
Alle geraden Zahlen eines Integer Arrays
Von !lkay im Forum JavaAntworten: 1Letzter Beitrag: 29.01.2013, 18:53 -
Gibt es noch eine Win7 ultimate oder andere demo?
Von K1NG im Forum WindowsAntworten: 4Letzter Beitrag: 09.02.2012, 17:03
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.