-1

你如何克隆一本这样的字典:

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 对象。

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

编辑 :

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

        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;}
     }
4

2 回答 2

3

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

您需要创建一个新字典,遍历原始字典中的所有条目,在List<User>新字典中添加一个对应的条目,然后遍历原始列表以将User对象的副本添加到新列表中。

于 2011-10-24T15:26:29.140 回答
0

您可以使用BinaryFormatter

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

所以

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

于 2011-10-24T15:32:36.773 回答