一尘不染

克隆/深复制.NET通用词典的最佳方法是什么?

c#

我有一个通用字典Dictionary<string, T>,从本质上讲,我想提出..any建议的Clone()。


阅读 267

收藏
2020-05-19

共1个答案

一尘不染

好的,.NET 2.0回答:

如果您不需要克隆值,则可以使用Dictionary的构造函数重载,它使用现有IDictionary。(您也可以将比较器指定为现有字典的比较器。)

如果您 确实 需要克隆值,则可以使用以下方法:

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()适当深的克隆。

2020-05-19