如何实现<int, List<int>>类型字典的按值复制?
如何实现Dictionary<int, List>的按值复制(深拷贝)
嘿,这个坑我之前踩过!你用的new Dictionary<int, List<int>>(d1)确实只是做了浅拷贝——它会复制字典里的键值对,但每个List<int>仍然是原字典中列表的引用,也就是说修改d2里的列表内容时,d1对应的列表也会跟着变,这肯定不是你想要的效果。
下面给你两种简单有效的实现方式:
方法一:用LINQ快速实现
直接通过ToDictionary方法,为每个键对应的列表创建一个新的副本:
Dictionary<int, List<int>> d2 = d1.ToDictionary( kvp => kvp.Key, // int是值类型,直接复制即可 kvp => new List<int>(kvp.Value) // 新建List并复制原列表的所有元素 );
这种方式简洁明了,适合一次性的拷贝需求。
方法二:封装成扩展方法(复用性更好)
如果你的代码里需要多次做这种深拷贝操作,可以写一个扩展方法,让代码更整洁:
public static class DictionaryExtensions { public static Dictionary<TKey, List<TValue>> DeepCopy<TKey, TValue>(this Dictionary<TKey, List<TValue>> source) where TKey : notnull // 字典键必须是非空类型,符合Dictionary的约束 { var copiedDict = new Dictionary<TKey, List<TValue>>(); foreach (var keyValuePair in source) { // 为每个列表创建独立副本 copiedDict.Add(keyValuePair.Key, new List<TValue>(keyValuePair.Value)); } return copiedDict; } }
使用的时候就非常简单了:
var d2 = d1.DeepCopy();
小提醒
如果你的列表里存的不是int这种值类型,而是自定义的引用类型,那你还需要对列表里的每个元素也做深拷贝才行,但针对你当前的int List场景,上面两种方法完全够用啦。
内容的提问来源于stack exchange,提问作者coderD
相关产品推荐
相关产品推荐

