ホームページ > バックエンド開発 > C++ > C# リストの真のディープ コピーを作成するにはどうすればよいですか?

C# リストの真のディープ コピーを作成するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-11 18:47:43
オリジナル
162 人が閲覧しました

How to Create a True Deep Copy of a C# List?

リストを作成するための真のディープ コピー メソッド

はじめに

多くのプログラミング シナリオでは、元のデータ構造の完全に独立したコピーを作成することが重要です。 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 の ConvertAll メソッドを使用するより簡単なアプローチを取ることもできます。

<code class="language-csharp">List<Book> books_2 = books_1.ConvertAll(book => new Book(book.title));</code>
ログイン後にコピー

このメソッドは、各要素が元のリストの対応する要素を変換した結果である新しいリストを返します。

このアプローチでは、books_2 と Books_1 は互いに独立しており、一方のリストへの変更は他方のリストには影響しません。

以上がC# リストの真のディープ コピーを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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