1. #1
    Avatar von DotNet
    Registriert seit
    10.06.2015
    Beiträge
    661
    Thanked 316 Times in 185 Posts

    Standard 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!

  2. The Following 2 Users Say Thank You to DotNet For This Useful Post:

    Negok (30.10.2016), Nuebel (04.11.2016)

  3. #2
    Avatar von Nuebel
    Registriert seit
    23.11.2013
    Beiträge
    446
    Thanked 361 Times in 236 Posts

    Standard 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)

  4. The Following User Says Thank You to Nuebel For This Useful Post:

    Negok (04.11.2016)

Ähnliche Themen

  1. Das eine sagen, das andere tun
    Von Fritz im Forum Zwischenmenschliches
    Antworten: 20
    Letzter Beitrag: 31.08.2021, 20:03
  2. Alle Bilder eines Facebook-Accounts herunterladen
    Von tolky99 im Forum Internet und Technik
    Antworten: 18
    Letzter Beitrag: 20.12.2014, 17:00
  3. Antworten: 1
    Letzter Beitrag: 19.08.2014, 18:04
  4. Antworten: 1
    Letzter Beitrag: 29.01.2013, 18:53
  5. Antworten: 4
    Letzter Beitrag: 09.02.2012, 17:03
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.