Frage

I definierte nächste Klasse mit virtuellen Eigenschaften:

public class Order: BaseEPharmObject
{
    public Order()
    {
    }

    public virtual Guid Id { get; set; }
    public virtual DateTime Created { get; set; }
    public virtual DateTime? Closed { get; set; }
    public virtual OrderResult OrderResult { get; set; }
    public virtual decimal Balance { get; set; }
    public virtual Customer Customer { get; set; }
    public virtual Shift Shift { get; set; }
    public virtual Order LinkedOrder { get; set; }
    public virtual User CreatedBy { get; set; }
    public virtual decimal TotalPayable { get; set; }

    public virtual IList<Transaction> Transactions { get; set; }
    public virtual IList<Payment> Payments { get; set; }
}

und zu klonen versucht, Objekte dieser abgeleiteten Klasse. Wie eine tiefe Kopie direkt in der Basisklasse implementieren?

War es hilfreich?

Lösung

Wenn Sie Ihre Typen sind serializable könnte verwenden BinaryFormatter :

public static T DeepClone<T>(T obj)
{
    using (var stream = new MemoryStream())
    {
        var formatter = new BinaryFormatter();
        formatter.Serialize(stream, obj);
        stream.Position = 0;
        return (T)formatter.Deserialize(stream);
    }
}

Andere Tipps

Der beste Weg ist in der Regel die Instanz zu serialisiert und rehydratisieren es als eine neue Instanz zurück. Eine Möglichkeit, dies zu tun beschrieben hier .

Meine einzige Einschränkung zu dem Artikel ist, dass implementiere dies nicht als ICloneable - diese Schnittstelle ist veraltet und wird für Anrufer Ihrer Klasse verwirrend. Das Beste, was wäre, diese Umsetzung in eine Hilfsmethode zu bewegen und dort nennen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top