You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中Dictionary存储List时value自动同步更新问题如何解决

根因说明

  • C#中List<string>属于引用类型,代码全程复用了初始化时创建的同一个mylist实例,字典内所有键存储的value都指向该实例的内存地址,没有生成独立的列表副本
  • 每次循环执行Add操作修改的都是同一个列表对象,因此所有键对应的value都会同步更新

修复方案

每次循环时基于基础列表创建独立的新列表实例,再存入字典即可,修复后代码如下:

// 作为基础模板的列表,全程不做修改
var baseList = new List<string>()
{
    "cucumber",
    "chilli",
    "tomato"
};
var yourlist = new List<string>()
{
    "apple",
    "mango",
    "banana"
};
var dict = new Dictionary<string, List<string>>();
foreach (var i in yourlist)
{
    // 每次循环创建独立的新列表副本,基于基础模板初始化
    var currentList = new List<string>(baseList);
    currentList.Add(i);
    dict.Add(i, currentList);
}
// 输出验证
foreach(var d in dict.Keys)
{
    Console.WriteLine($"键{d}对应的列表:");
    foreach(var l in dict[d])
    {
        Console.WriteLine(l);
    }
}

也可以使用ToList()扩展方法生成副本,本质和上述写法一致,都是创建新的列表实例,避免引用复用导致的联动修改问题。

内容的提问来源于stack exchange,提问作者Nomaan Pansare

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:45:03