如何在c#中克隆祖先?

时间:2011-07-25 04:50:56

标签: c# cloning

我需要一个对象的半浅拷贝。在我的原始设计下,我使用MemberwiseClone来捕获所有简单的东西,然后我特意将类复制到需要复制的程度。 (其中一些本质上是静态的,其余大部分都是容纳静态物品的容器。)我不喜欢那长长的副本,但是没有办法解决这个问题。

然而,现在,我发现自己需要创建一个后代对象 - 我现在必须返回并复制以前使用MemberwiseClone复制的所有字段吗?

或者我错过了一些更好的解决方法吗?

1 个答案:

答案 0 :(得分:4)

我发现最简单的克隆方法是使用序列化。这显然只适用于[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);
        }
    }
}