ジェネリックの汎用リストの効率的なクローニング:in -depth分析
質問声明:
C#では、一般的なオブジェクトのリストを高度にクローン化するにはどうすればよいですか?リスト内の単一のオブジェクトはクローン化されていますが、リスト自体には構築された「クローン」メソッドがありません。 メソッド1:クローニングのタイプ
クローンは、値タイプの汎用リストにとって非常に簡単です。元のリストと同じコンテンツの新しいリストを作成するだけです。
メソッド2:参照タイプを深くコピーします
汎用リストに参照タイプが含まれており、(浅い複製の代わりに)詳細にコピーする必要がある場合、次の
インターフェイス方法を使用できます。<code class="language-csharp">List<你的类型> newList = new List<你的类型>(oldList);</code>
このメソッドは、クローンリスト内のすべてのオブジェクトが元のリストのオブジェクトと完全に独立していることを保証します。 メソッド3:コピーコンストラクターを使用してクローニング
ICloneable
リスト要素が実現されていないが、重複するコンストラクターがある場合、さまざまなクローニング戦略を使用できます。
<code class="language-csharp">List<ICloneable> oldList = new List<ICloneable>(); List<ICloneable> newList = new List<ICloneable>(oldList.Count); oldList.ForEach((item) => { newList.Add((ICloneable)item.Clone()); });</code>
その他の提案
インターフェイスは利便性を提供できますが、問題が発生する可能性のあるすべてのメンバーの詳細なコピーを確保することに依存します。次の代替スキームを考慮することができます
コンストラクターのコピー:明確な定義状態を持つタイプの場合、複製コンストラクターは、深さコピーを作成するためにより効果的で保守しやすいメソッドを提供します。 ICloneable
<code class="language-csharp">List<你的类型> oldList = new List<你的类型>(); List<你的类型> newList = new List<你的类型>(oldList.Count); oldList.ForEach((item) => { newList.Add(new 你的类型(item)); });</code>
提案されているクローン方法は、利便性を向上させるために再利用可能な方法または拡張機能でカプセル化できます。
以上がC#で一般的なリストを効率的にクローンする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。