【问题标题】:How do I clone an ancestor in c#?如何在 C# 中克隆祖先?
【发布时间】:2011-10-12 07:39:04
【问题描述】:

我需要一个对象的半浅拷贝。在我最初的设计下,我使用 MemberwiseClone 来捕获所有简单的东西,然后我专门复制了类到需要复制的程度。 (其中一些本质上是静态的,其余大部分是容纳静态项目的容器。)我不喜欢长长的副本列表,但没有办法解决这个问题。

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

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

【问题讨论】:

标签: c# cloning


【解决方案1】:

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

【讨论】:

  • 看起来它可以完成这项工作。我只是被困在盒子里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
  • 2011-05-03
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 2011-02-04
相关资源
最近更新 更多