Erstelle eine Deep Copy in C #

Ich möchte eine tiefe Kopie eines Objekts erstellen, damit ich die neue Kopie ändern und trotzdem die Option haben kann, meine Änderungen abzubrechen und das ursprüngliche Objekt wiederherzustellen.

Mein Problem hierbei ist, dass das Objekt von einem beliebigen Typ sein kann, auch aus einer unbekannten Assembly. Ich kann nicht benutzenBinaryFormatter oderXmlSerializer, da das Objekt unnötigerweise das Attribut [Serializable] hat.

Ich habe versucht, dies mit dem @ zu tObject.MemberwiseClone() Methode

public object DeepCopy(object obj)
{
    var memberwiseClone = typeof(object).GetMethod("MemberwiseClone", BindingFlags.Instance | BindingFlags.NonPublic);

    var newCopy = memberwiseClone.Invoke(obj, new object[0]);

    foreach (var field in newCopy.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic))
    {
        if (!field.FieldType.IsPrimitive && field.FieldType != typeof(string))
        {
            var fieldCopy = DeepCopy(field.GetValue(newCopy));
            field.SetValue(newCopy, fieldCopy);
        }
    }
    return newCopy;
}

Das Problem dabei ist, dass es nicht für eine Aufzählung (Array, Liste usw.) und nicht für ein Wörterbuch funktioniert.

Also, wie kann ich eine tiefe Kopie eines unbekannten Objekts in C # machen?

Vielen Dank

Antworten auf die Frage(16)

Ihre Antwort auf die Frage