Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将一本词典的内容复制到另一本词典中,以便随后清除原来的内容_C#_Dictionary - Fatal编程技术网

C# 如何将一本词典的内容复制到另一本词典中,以便随后清除原来的内容

C# 如何将一本词典的内容复制到另一本词典中,以便随后清除原来的内容,c#,dictionary,C#,Dictionary,我想将一个字典的内容复制到另一个名为tempDict的字典中,这样即使清除了第一个字典,也可以使用原始字典的数据。两本词典的类型相同 我试过以下方法 Dictionary<string, Dictionary<int, List<dynamic>>> tempDict = new Dictionary<string, Dictionary<int, List<dynamic>>>(originalDict); origin

我想将一个字典的内容复制到另一个名为tempDict的字典中,这样即使清除了第一个字典,也可以使用原始字典的数据。两本词典的类型相同

我试过以下方法

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