如何在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中的列表,但我不确定如何在不手动深度复制每个列表的情况下解决这个问题。

如何在c#中深度复制包含列表的字典

您还需要深度复制列表;您所做的只是复制字典,但它们之间仍然共享所有的列表引用。

使用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是一个值类型,这应该工作。否则,你必须为每个值分别创建一个深拷贝。

使用BinaryFormatterDictionary序列化为MemoryStream,然后将其反序列化回变量:

using (MemoryStream ms = new MemoryStream())
{
   IFormatter formatter = new BinaryFormatter();
   formatter.Serialize(ms, oldStudants);
   var newStudants = (Dictionary<String, List<int>>)formatter.Deserialize(ms);
}