C# で new List<Book>(books_1)
を使用して List<T>
のクローンを作成するだけでは、完全に独立したコピーは作成されません。 クローンされたリストへの変更は、基になるオブジェクトへの参照を共有するため、元のリストにも影響します。
クローンされたリストへの変更が元のリストに影響を与えないようにしながら、真のディープ コピーを実現するには、次の手法を使用します。
<code class="language-csharp">List<Book> books_2 = books_1.ConvertAll(book => new Book(book.title));</code>
このコードは、元のリスト (Book
) 内の各 books_1
オブジェクトを反復処理します。オブジェクトごとに、コンストラクターを使用して new Book
オブジェクトを作成します (ここでは、Book
が引数として title
を取るコンストラクターを持っていると仮定して暗黙的に示しています)。 これらの新しく作成された Book
オブジェクトは、新しいリスト (books_2
) に追加されます。 これにより、books_2
には books_1
からのデータの完全に独立したコピーが含まれることが保証されます。
以上が共有参照を避けるために C# でリストをディープ コピーする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。