向Dictionary中的静态List添加元素后,原静态List为何被修改?
为什么修改字典中的列表会影响原静态列表?
这是因为List
当你执行BasCevresi.Add("mylabel", E_18_BasCevresi);的时候,并没有把E_18_BasCevresi列表的副本添加到字典里,而是把它的引用(也就是内存地址)存进了字典。这意味着字典里的"mylabel"对应的列表和静态变量E_18_BasCevresi指向的是同一个列表实例。
所以当你调用BasCevresi["mylabel"].Add(15);时,本质上是在操作那个唯一的列表实例——不管是通过字典的键访问,还是通过静态变量访问,看到的都是同一个列表,自然静态列表里也会出现15。
怎么解决这个问题?
如果你想让字典里的列表和原静态列表相互独立,在添加到字典的时候,需要创建一个原列表的副本,而不是直接传递引用。可以通过以下方式实现:
// 创建原列表的副本,再添加到字典 BasCevresi.Add("mylabel", new List<decimal>(E_18_BasCevresi));
这样字典里的"mylabel"对应的是一个全新的列表实例,它的初始元素和原静态列表完全一致,但后续对它的修改不会影响原静态列表,反之亦然。
内容的提问来源于stack exchange,提问作者Yener
相关产品推荐
相关产品推荐

