1

オブジェクトの半浅いコピーが必要です。私の元の設計では、MemberwiseCloneを使用してすべての単純なものをキャッチし、次に、コピーする必要がある範囲でクラスを具体的にコピーしました。(それらのいくつかは本質的に静的であり、残りのほとんどは静的アイテムを保持するコンテナーです。)私はコピーの長いリストが好きではありませんでしたが、それを回避する方法はありません。

ただし、今では、子孫オブジェクトを作成する必要があることに気付きました。以前にMemberwiseCloneでコピーしていたすべてのフィールドに戻って、コピーする必要がありますか?

または、これに対するいくつかのより良い回避策がありませんか?

4

1 に答える 1

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);
        }
    }
}
于 2011-07-25T05:10:01.717 に答える