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'中来将其标记为代码。