ホームページ > バックエンド開発 > C++ > C# でリストのディープ コピーを作成する方法

C# でリストのディープ コピーを作成する方法

Patricia Arquette
リリース: 2025-01-11 18:36:42
オリジナル
473 人が閲覧しました

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

C# でのリストのディープ コピー

C# でリストを直接割り当てる (例: List<T> list2 = list1;)、または List<T> list2 = new List<T>(list1); を使用すると、浅いコピーが作成されます。 一方のリストを変更すると、基になるオブジェクトが同じであるため、もう一方のリストにも影響します。一方のリストへの変更が他方のリストから独立した真のディープ コピーを作成するには、含まれているオブジェクトを複製する必要があります。その方法は次のとおりです:

方法 1: LINQ を使用する (推奨)

最も簡潔で効率的なアプローチは、LINQ の Select メソッドを利用して、リスト内の各オブジェクトの新しいインスタンスを作成します。

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

この行は books_1 を反復処理し、既存の Book を使用して要素ごとに新しい title オブジェクトを作成し (Book クラスにタイトルを取得するコンストラクターがあると仮定します)、結果のシーケンスを変換して戻します。新しい List<Book>.

方法 2: ConvertAll を使用する (代替)

ConvertAll メソッドは、同じ結果を得るためにもう少し単純な構文を提供します。

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

これにより、LINQ アプローチと同じディープ コピーが実現されます。 読みやすい方の方法を選択してください。

どちらの方法でも、books_2books_1 の完全に独立したディープ コピーであることが保証されます。どちらかのリストに変更を加えても、もう一方のリストには影響しません。 これは、Book クラス (またはリストに含まれる型) が新しいインスタンスの作成を容易にする適切なコンストラクターを持っていることを前提としていることに注意してください。 Book クラスにさらに多くのプロパティがある場合は、それに応じてそれらを new Book(...) コンストラクター呼び出しに含める必要があります。

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

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