1. ホーム
  2. c#

[解決済み] .NET汎用Dictionary<string, T>をクローン/ディープコピーする最良の方法は何ですか?

2022-02-24 09:45:19

質問

一般的な辞書を手に入れた Dictionary<string, T> のClone()を作りたいのですが、何か提案はありますか?

どのように解決するのですか?

では、.NET2.0の回答です。

値をクローンする必要がない場合は、既存の IDictionary を受け取る Dictionary へのコンストラクタのオーバーロードを使用できます。(比較対象は既存の辞書の比較対象として指定することも可能です)。

もし する は、値をクローンする必要があるので、次のようなものを使うことができます。

public static Dictionary<TKey, TValue> CloneDictionaryCloningValues<TKey, TValue>
   (Dictionary<TKey, TValue> original) where TValue : ICloneable
{
    Dictionary<TKey, TValue> ret = new Dictionary<TKey, TValue>(original.Count,
                                                            original.Comparer);
    foreach (KeyValuePair<TKey, TValue> entry in original)
    {
        ret.Add(entry.Key, (TValue) entry.Value.Clone());
    }
    return ret;
}

に依存しています。 TValue.Clone() もちろん、それなりに深いクローンであることは間違いない。