克隆将List作为值的字典

时间:2011-10-24 15:23:06

标签: c# .net cloning

如何克隆这样的词典:

Dictionary<int, List<User>>()

我克隆它的每次尝试都会失败。

如果我有这个:

Dictionary<int, List<User>> dict1 = new Dictionary<int, List<User>>();
User user1=new User{Name="Mey"};
dict1.Add(1,user1);

这样做:

var dict2 = new Dictionary<int, List<User>>(dict1);

dict2仍然会引用user1而不是新的User对象。

我希望复制User对象,以便更改克隆属性不会反映在原始对象上。

修改:

所以我编写了以下代码片段:

        var dict2 = new Dictionary<int, List<User>>();

        //clone the dict1 dictionary
        foreach (var item in dict1)
        {
            var list = new List<User>();
            foreach (var u in item.Value)
            {
                list.Add(new User{ Name = u.Name, Total=u.Total}); 
            }
            dict2.Add(item.Key, list);
        }

     class User
     { 
        public string Name{get;set;}
        public double Total{get;set;}
     }

2 个答案:

答案 0 :(得分:3)

.Net集合没有内置的克隆支持。

您需要创建一个新的字典,循环遍历原始字典中的所有条目,在新字典中添加一个带有新List<User>的相应条目,并循环遍历原始列表以添加User对象到新列表。

答案 1 :(得分:0)

您可以使用BinaryFormatter

1)将您的对象序列化到MemoryStream

因此

2)将MemoryStream反序列化为新对象