你如何做一个深层副本对象在.net(C#专)?副本、对象、如何做一个、net

2023-09-02 01:16:17 作者:再見小時候

我希望有一个真正的深层副本。在Java中,这很简单,但你怎么做它在C#?

I want a true deep copy. In Java, this was easy, but how do you do it in C#?

推荐答案

我已经看到了一些不同的方法,但我用一个通用的实用方法,例如:

I've seen a few different approaches to this, but I use a generic utility method as such:

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

   return (T) formatter.Deserialize(ms);
 }
}

注:

为了使这项工作您的类必须被标记为 [Serializable接口]

您的源文件都必须包括以下code: Your class MUST be marked as [Serializable] in order for this to work.

Your source file must include the following code:

using System.Runtime.Serialization.Formatters.Binary;
using System.IO;