リストを作成するための真のディープ コピー メソッド
はじめに
多くのプログラミング シナリオでは、元のデータ構造の完全に独立したコピーを作成することが重要です。 C# の List
質問
次のコード スニペットを考えてみましょう:
<code class="language-csharp">List<Book> books_1 = new List<Book>(); books_1.Add(new Book("One")); books_1.Add(new Book("Two")); books_1.Add(new Book("Three")); books_1.Add(new Book("Four")); List<Book> books_2 = new List<Book>(books_1); books_2[0].title = "Five"; books_2[1].title = "Six"; // 对books_2的更改会反映在books_1中 textBox1.Text = books_1[0].title; textBox2.Text = books_1[1].title;</code>
このコードは新しいリストを作成しますが、books_2 の Book オブジェクトは依然としてbooks_1 の同じオブジェクトへの参照です。したがって、books_2 を変更すると、books_1 に影響します。
解決策
リストの真のディープコピーを作成するには
<code class="language-csharp">List<Book> books_2 = books_1.Select(book => new Book(book.title)).ToList();</code>
books_1 の各 Book オブジェクトは、LINQ の Select メソッドを使用して新しい Book オブジェクトに変換されます。これらの新しいオブジェクトは、books_2 に保存され、ディープ コピーが作成されます。
または、List
<code class="language-csharp">List<Book> books_2 = books_1.ConvertAll(book => new Book(book.title));</code>
このメソッドは、各要素が元のリストの対応する要素を変換した結果である新しいリストを返します。
このアプローチでは、books_2 と Books_1 は互いに独立しており、一方のリストへの変更は他方のリストには影響しません。
以上がC# リストの真のディープ コピーを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。