C# 如何将一本词典的内容复制到另一本词典中,以便随后清除原来的内容
我想将一个字典的内容复制到另一个名为tempDict的字典中,这样即使清除了第一个字典,也可以使用原始字典的数据。两本词典的类型相同 我试过以下方法C# 如何将一本词典的内容复制到另一本词典中,以便随后清除原来的内容,c#,dictionary,C#,Dictionary,我想将一个字典的内容复制到另一个名为tempDict的字典中,这样即使清除了第一个字典,也可以使用原始字典的数据。两本词典的类型相同 我试过以下方法 Dictionary<string, Dictionary<int, List<dynamic>>> tempDict = new Dictionary<string, Dictionary<int, List<dynamic>>>(originalDict); origin
Dictionary<string, Dictionary<int, List<dynamic>>> tempDict = new Dictionary<string, Dictionary<int, List<dynamic>>>(originalDict);
originalDict.Clear();
Dictionary tempDict=新词典(原词典);
原ict.Clear();
Dictionary tempDict=newdictionary();
tempDict=原始信息;
原ict.Clear();
但这似乎不起作用,但对我来说,这两种方法都会创建一个字典的新实例,然后将实例值分配给OriginalICT,因为它是一个新实例,即使删除OriginalICT,怎么能同时删除这两个实例呢?我不太明白这一点,我可能错了,但如果有人能解释,那就太好了
提前谢谢 我的测试代码显示
origDict
到tempDict
的浅拷贝工作正常:
Console.WriteLine(origDict.Count); // outputs 1
var tempDict = new Dictionary<string, Dictionary<int, List<dynamic>>>(origDict);
Console.WriteLine(tempDict.Count); // outputs 1
origDict.Clear();
Console.WriteLine(origDict.Count); // outputs 0
Console.WriteLine(tempDict.Count); // outputs 1
Console.WriteLine(origDict.Count);//产出1
var tempDict=新词典(origDict);
Console.WriteLine(tempDict.Count);//产出1
origDict.Clear();
Console.WriteLine(origDict.Count);//产出0
Console.WriteLine(tempDict.Count);//产出1
在originalDict
上执行foreach循环,并将项目添加到tempDict
newdictionary(originalDict)
中。复制元素时,这仅是一个浅层副本,清除原始副本将清除副本。你需要更深入地复制!使用ToDictionary可能会有所帮助。@Luxior另一种方法是使用linq。类似于tempDict=originalDict.ToDictionary(x=>x.Key,x=>x.Value.ToDictionary(y=>y.Key,y=>y.Value.ToList())
。浅层副本应该很好-origDict.Clear()
不应该影响tempDict
,在我的代码中也不会。您是否对origDict
中的值做了其他操作?嗯,的确,它是有效的,我对它做了/没有做任何其他操作,只是检查了其中的数据。。。(我用json序列化)当我发布这篇文章时,它只序列化了{}虽然在清除之前origDict中有数据,而tempDict中有数据,不知道发生了什么,但这肯定是我的错,尽管不能复制它。。。不管怎么说,它已经回答了,谢谢你的回答和帮助!
Console.WriteLine(origDict.Count); // outputs 1
var tempDict = new Dictionary<string, Dictionary<int, List<dynamic>>>(origDict);
Console.WriteLine(tempDict.Count); // outputs 1
origDict.Clear();
Console.WriteLine(origDict.Count); // outputs 0
Console.WriteLine(tempDict.Count); // outputs 1