C# 克隆具有列表作为值的词典

C# 克隆具有列表作为值的词典,c#,.net,cloning,C#,.net,Cloning,如何克隆这样的词典: Dictionary<int, List<User>>() Dictionary() 我克隆它的每一次尝试都以失败告终 如果我有这个: Dictionary<int, List<User>> dict1 = new Dictionary<int, List<User>>(); User user1=new User{Name="Mey"}; dict1.Add(1,user1); Dictiona

如何克隆这样的词典:

Dictionary<int, List<User>>()
Dictionary()
我克隆它的每一次尝试都以失败告终

如果我有这个:

Dictionary<int, List<User>> dict1 = new Dictionary<int, List<User>>();
User user1=new User{Name="Mey"};
dict1.Add(1,user1);
Dictionary dict1=新字典();
User user1=新用户{Name=“Mey”};
添加(1,用户1);
这样做:

var dict2 = new Dictionary<int, List<User>>(dict1);
var dict2=新字典(dict1);
dict2仍将引用user1,而不是新的用户对象

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

编辑:

因此,我编写了以下代码片段:

        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;}
     }
var dict2=新字典();
//克隆dict1字典
foreach(dict1中的var项目)
{
var list=新列表();
foreach(项目值中的var u)
{
添加(新用户{Name=u.Name,Total=u.Total});
}
添加(项.键,列表);
}
类用户
{ 
公共字符串名称{get;set;}
公共双总计{get;set;}
}

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

您需要创建一个新词典,循环浏览原始词典中的所有条目,在新词典中添加具有新
列表的相应条目,并循环浏览原始列表以将
用户
对象的副本添加到新列表中。

您可以使用:

1) 将对象序列化为MemoryStream

所以


2) 反序列化内存流到新对象

hmmm。。。我的意思是像这本字典这样的字典请展示一些源代码。。。你试过什么?“失败”是什么意思?有任何错误消息/例外情况吗?我似乎无法在问题正文中输入此(词典):(请参阅类似的问题,您需要通过将其包装在's'中来将其标记为代码。