ToList() メソッドを使用するとき、オブジェクトの既存のリストへの影響について疑問に思うかもしれません。この記事では、ToList() の動作とオブジェクトの不変性に対するその影響について詳しく説明します。
次のコードを考えてみましょう。
public void RunChangeList() { var objs = new List<MyObject>(){ new MyObject() { SimpleInt = 0 } }; var whatInt = ChangeToList(objs); } public int ChangeToList(List<MyObject> objects) { var objectList = objects.ToList(); objectList[0].SimpleInt = 5; return objects[0].SimpleInt; }
ToList() が呼び出されると、次の新しいリストが作成されます。元のオブジェクトへの参照が含まれています。これを理解するには、元のリスト (objs) が MyObject クラスのインスタンスへの参照を保持していることを認識することが重要です。 ToList() はオブジェクト自体をコピーしません。代わりに、参照のコレクションを複製します。これは、新しいリスト内のオブジェクトに加えられた変更は、両方とも同じ基になるオブジェクトを参照するため、元のリストに反映されることを意味します。
提供されたコードでは、objectList リスト内のオブジェクトの SimpleInt プロパティを変更します。また、objs リスト内の対応するオブジェクトも変更します。これは、両方のリストが MyObject の同じインスタンスを指しているために発生します。その結果、メソッド ChangeToList は、更新された SimpleInt プロパティ値を示す 5 を返します。
ただし、MyObject クラスがクラスではなく構造体として宣言されている場合、ToList() はコピーを含む新しいリストを作成します。元のリスト内のオブジェクトの数。このシナリオでは、新しいリスト内のオブジェクトを変更しても元のリストには影響せず、その不変性が維持されます。
以上が`ToList()` はリストの深いコピーを作成しますか、それとも単に浅いコピーを作成しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。