.NET 汎用辞書のディープ クローン作成
.NET 汎用辞書のクローン作成は、その辞書を保持したい場合に重要です。オリジナルを変更せずにデータを作成します。このガイドでは、Dictionary
浅いクローン作成とディープ クローン作成の比較
浅いコピーでは、辞書を参照する新しい辞書が作成されます。ソース ディクショナリ内の元のオブジェクトは保存されますが、ディープ コピーによって新しいオブジェクトが作成されます。この場合、コピーされた辞書に加えられた変更が元の辞書に影響を与えないように、ディープ コピーが必要になります。
LINQ ベースのソリューション
.NET 3.5 以降を使用している場合、LINQ ToDictionary メソッドは、深い問題に対する簡単なソリューションを提供します。 cloning:
var newDictionary = oldDictionary.ToDictionary(entry => entry.Key, entry => (T)entry.Value.Clone());
このアプローチでは、クローンされたキーと値のペアを含む新しい辞書が作成されます。ただし、T が ICloneable を実装していない場合は、単純な値の割り当てを使用できます。
var newDictionary = oldDictionary.ToDictionary(entry => entry.Key, entry => entry.Value);
カスタム クローニング ソリューション
また、次のようなカスタム クローニング メソッドを実装することもできます。リフレクションを使用して、ディクショナリ内のすべてのオブジェクトの新しいインスタンスを作成します。 T が ICloneable を実装している場合、次のメソッドを使用できます:
public static Dictionary<TKey, TValue> Clone<TKey, TValue>(Dictionary<TKey, TValue> original) { var clonedDictionary = new Dictionary<TKey, TValue>(); foreach (var entry in original) clonedDictionary.Add(entry.Key, (TValue)entry.Value.Clone()); return clonedDictionary; }
以上が.NET 汎用辞書をディープ クローンするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。