如何在c#中深度复制包含列表的字典
本文关键字:包含 列表 字典 复制 深度 | 更新日期: 2023-09-27 18:15:03
我需要一个深拷贝的Dictionary<string, List<int>>
。我试着:
Dictionary<string, List<int>> tmpStudents =
new Dictionary<string, List<int>>(students);
,但操作tmpStudents
中的值仍然会改变students
中的值。似乎tmpStudents
中的列表仍然引用students
中的列表,但我不确定如何在不手动深度复制每个列表的情况下解决这个问题。
您还需要深度复制列表;您所做的只是复制字典,但它们之间仍然共享所有的列表引用。
使用LINQ:
这是相当容易的var tmpStudents = students.ToDictionary(p => p.Key, p => p.Value.ToList());
试试这个:
var tmpStudents = students.ToDictionary(x => x.Key, x => x.Value.ToList());
因为你有一个List<int>
和int
是一个值类型,这应该工作。否则,你必须为每个值分别创建一个深拷贝。
使用BinaryFormatter
将Dictionary
序列化为MemoryStream
,然后将其反序列化回变量:
using (MemoryStream ms = new MemoryStream())
{
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, oldStudants);
var newStudants = (Dictionary<String, List<int>>)formatter.Deserialize(ms);
}