1

重複の可能性:
C# で汎用リストを複製するにはどうすればよいですか?

C# でリストを別のリストにコピーしたい。問題は、のような既存のメソッドがcopyto別のリストから新しいリストを作成することです。しかし、新しいリストに変更を加えると、古いリストも変更されます。その参照型の動作が原因です。foreach同じオブジェクトを参照しない別のリストから新しいリストを作成する(ループ以外の) 方法がある場合

4

1 に答える 1

17

したがって、必要なのはリストのディープ コピーです。2 番目のリストには、1 番目のリストの要素のコピーが含まれます。その場合、いずれかのリストの要素が変更されても、他のリストは変更されません。

その方法は、リストの要素が参照型か値型かによって異なります。値型リストは、次のように簡単に複製できます。

List<int> deepCopy = new List<int>(originalList);

参照型リストの場合、次のようにシリアル化を使用できます。

public List<MyObject> DeepCopy()
{
    MemoryStream ms = new MemoryStream();
    BinaryFormatter bf = new BinaryFormatter();
    bf.Serialize(ms, this);

    ms.Position = 0;
    return (List<MyObject>) bf.Deserialize(ms);
}
于 2012-12-07T06:36:01.510 に答える