ホームページ > バックエンド開発 > C++ > `ToList()` はリストの深いコピーを作成しますか、それとも単に浅いコピーを作成しますか?

`ToList()` はリストの深いコピーを作成しますか、それとも単に浅いコピーを作成しますか?

Mary-Kate Olsen
リリース: 2024-12-30 08:56:13
オリジナル
979 人が閲覧しました

Does `ToList()` Create a Deep Copy or Just a Shallow Copy of a List?

ToList() は新しいリストを作成しますか?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート