如何在c#中克隆祖先
本文关键字:祖先 | 更新日期: 2023-09-27 18:03:38
我需要一个对象的半浅拷贝。在我最初的设计中,我使用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);
}
}
}