mikeymo mikeymo - 9 months ago 212
C# Question

What is the best way to clone/deep copy a .NET generic Dictionary<string, T>?

I've got a generic dictionary Dictionary that I would like to essentially make a Clone() of ..any suggestions.


Okay, the .NET 2.0 answers:

If you don't need to clone the values, you can use the constructor overload to Dictionary which takes an existing IDictionary. (You can specify the comparer as the existing dictionary's comparer, too.)

If you do need to clone the values, you can use something like this:

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,
    foreach (KeyValuePair<TKey, TValue> entry in original)
        ret.Add(entry.Key, (TValue) entry.Value.Clone());
    return ret;