如何克隆c#中的祖先?
我需要一个对象的半浅拷贝。 在我最初的设计中,我使用MemberwiseClone捕捉所有简单的东西,然后专门复制这些类到需要复制的程度。 (其中一些本质上是静态的,其余大部分都是容纳静态物品的容器。)我不喜欢长长的副本列表,但是没有办法解决这个问题。
但是,现在我发现自己需要创建一个后代对象 - 我现在是否必须返回并复制以前使用MemberwiseClone复制的所有这些字段?
或者我错过了一些更好的解决方法?
我发现克隆的最简单方法是使用序列化。 这显然只适用于[Serializable]
或实现ISerializable
。
这是一个通用的通用扩展,您可以使用它来创建任何可序列化的类的可克隆对象:
public static T Clone<T>(this T source)
{
if (source == default(T))
{
return default(T);
} else {
IFormatter formatter = new BinaryFormatter();
Stream ms = new MemoryStream();
using (ms)
{
formatter.Serialize(ms, source);
stream.Seek(0, SeekOrigin.Begin);
return (T) formatter.Deserialize(ms);
}
}
}
链接地址: http://www.djcxy.com/p/40747.html