【问题标题】:C# dictionary value is updating automaticallyC# 字典值自动更新
【发布时间】:2021-12-31 02:10:39
【问题描述】:

在我最近的项目中,我试图制作一个字典,其中键作为字符串,值作为字符串列表(列表),并使用 for 循环在字典中添加值, 但问题是,在第一次迭代后,当我为第二次迭代更新列表时,它会在第一个键值对中自动更改。 例如,在第一次迭代中,它将键保存为苹果,将值保存为列表 {cucumber,chilli,tomato,apple} 它很好,但在第一次迭代后,当我将列表更新为 {cucumber,chilli,tomato,apple,mango} 并将其保存到第二个关键 mango 它也将第一个值更新为 {cucumber,chilli,tomato,apple,mango}。

var mylist = 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)
            {
                mylist.Add(i);
                dict.Add(i,mylist);
            }
            foreach(var d in dict.Keys)
            {
                foreach(var l in dict[d])
                {
                    Console.WriteLine(l);
                }
            }

【问题讨论】:

  • Caius 在回答中提到了问题。但这不仅仅是为了解决这个问题。但是通过查看代码看起来很奇怪,我没有得到你想要通过这段代码实现的目标?你能解释一下吗
  • 实际上我想从另一个表中添加用户名和值,这是访问列表,因此对于每次迭代我都会更改字符串列表的值(访问),但它给出了最后更新的列表访问与键关联的所有值
  • 这是我的实际代码
  • for(int i = 0; i x.UserRowId == user[i].RowID).ToList (); foreach (var j in ll) { var forumName = forum.Where(x => x.RowId == j.ForumRowId).FirstOrDefault().ForumName;论坛列表。添加(论坛名称); } dict[user.ElementAt(i).FirstName] = forumList;论坛列表.清除(); }

标签: c# .net list dictionary asp.net-core


【解决方案1】:

字典条目的 Value 属性始终是同一个列表,因此您对其中一个所做的任何事情最终都会显示在所有条目中(因为只有一个)

看看下面的代码;如果你明白为什么这里的ab 都显示相同的变化,那么你应该明白你的字典场景本质上是一样的

var list = new List<string>(){ "hello", "world" };
var a = list;
var b = list;

a.Add("there");

Console.Write(b.Count); //shows 3

如果您不明白为什么ablist 以上都指的是同一个列表,那么请发表评论,我会添加更多解释


至于您应该如何处理您的“问题”,我并不完全清楚您希望做什么,但是如果您确保字典中的每个键都与一个新列表而不是同一个列表相关联,那么对一个键列表的更改将不会显示在其他键的列表中:

dict.Add(i, new List<string>(mylist));

这会为每个键创建一个新列表,并使用当时存在于 mylist 中的项目初始化新列表(我的列表每次循环都会增长)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 2017-07-18
    • 2021-07-09
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多