为了账号安全,请及时绑定邮箱和手机立即绑定

克隆/深度复制.NET泛型字典<string,T>的最佳方法是什么?

克隆/深度复制.NET泛型字典<string,T>的最佳方法是什么?

C#
潇潇雨雨 2019-09-02 10:12:34
我有一个通用字典Dictionary<string, T>,我想基本上做一个克隆()的任何建议。
查看完整描述

3 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

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


查看完整回答
反对 回复 2019-09-02
?
元芳怎么了

TA贡献1798条经验 获得超7个赞


您希望副本有多深,以及您使用的是什么版本的.NET?我怀疑如果您使用的是.NET 3.5,那么对ToDictionary进行LINQ调用(同时指定键和元素选择器)将是最简单的方法。


例如,如果您不介意该值是浅层克隆:


var newDictionary = oldDictionary.ToDictionary(entry => entry.Key,

                                               entry => entry.Value);

如果您已经限制T实现ICloneable:


var newDictionary = oldDictionary.ToDictionary(entry => entry.Key, 

                                               entry => (T) entry.Value.Clone());

(这些是未经测试的,但应该有效。)


查看完整回答
反对 回复 2019-09-02
?
SMILET

TA贡献1796条经验 获得超4个赞

Dictionary<string, int> dictionary = new Dictionary<string, int>();


Dictionary<string, int> copy = new Dictionary<string, int>(dictionary);


查看完整回答
反对 回复 2019-09-02
  • 3 回答
  • 0 关注
  • 715 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信