在C#中克隆对象
我用虚拟属性定义了下一个类:
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 Transactions { get; set; } public virtual IList Payments { get; set; } }
并尝试克隆该派生类的对象。 如何在基类中实现深层复制?
如果你的类型是可序列化的,你可以使用BinaryFormatter :
public static T DeepClone(T obj) { using (var stream = new MemoryStream()) { var formatter = new BinaryFormatter(); formatter.Serialize(stream, obj); stream.Position = 0; return (T)formatter.Deserialize(stream); } }
最好的方法通常是序列化实例并将其作为新实例重新水化。 这里描述了一种方法。
我对该文章的唯一警告是,不要将其实现为ICloneable
– 这个界面已被弃用,并且让您的类的调用者感到困惑。 最好的办法是将此实现移动到实用程序方法中并在其中调用它。