リストのディープコピーによる真のオブジェクトの独立性の実現
コード例は、List<Book> books_1
オブジェクトを含む 2 つのリスト (List<Book> books_2
と Book
) を示しています。 単純な代入では、books_2
は books_1
のコピーのように見えますが、books_2
は同じ books_1
オブジェクトへの参照を共有しているため、Book
を変更すると
ディープ クローン作成の重要性
真に独立したコピーを作成するには、共有参照を避ける必要があります。 これには、完全に新しい Book
オブジェクトを作成し、元のオブジェクトからのデータを設定する必要があります。これはディープ コピーと呼ばれるプロセスです。
ディープコピーの実装
ディープコピーは、Select
または ConvertAll
メソッドのラムダ式を使用して効率的に作成できます。
Select
の使用:
<code class="language-csharp">List<Book> books_2 = books_1.Select(book => new Book(book.title)).ToList();</code>
ConvertAll
の使用:
<code class="language-csharp">List<Book> books_2 = books_1.ConvertAll(book => new Book(book.title));</code>
どちらのアプローチでも、ラムダ式内に新しい Book
インスタンスが生成され、元の title
オブジェクトから Book
プロパティがコピーされます。 結果の books_2
リストには、完全に新しい独立した Book
オブジェクトが含まれます。
ディープコピーの利点
ディープコピーにより、books_2
への変更が books_1
に影響を与えないことが保証されます。これは、元のデータを変更せずに変更されたコピーを操作する必要がある場合に非常に重要です。 このアプローチにより、データの整合性が保証され、意図しない副作用が防止されます。
以上が真のオブジェクト独立性を実現するためにリストのディープコピーを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。