在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 – 这个界面已被弃用,并且让您的类的调用者感到困惑。 最好的办法是将此实现移动到实用程序方法中并在其中调用它。