当前位置:  开发笔记 > 编程语言 > 正文

为什么我不能在foreach中添加一个字典(Key,Value)?

如何解决《为什么我不能在foreach中添加一个字典(Key,Value)?》经验,为你挑选了3个好方法。

如果我想循环一个字典(键,值)...为什么我不能在循环中添加一个新的键值对?

Dictionary persons = new Dictionary();

persons.Add("roger", "12");
persons.Add("mary", "13");

foreach (KeyValuePair person in persons)
{
 Console.WriteLine("Name: " + person.Key + ", Age: " + person.Value);
 persons.Add("Xico", "22");
}

tvanfosson.. 21

这是因为构造枚举器的方式.

来自MSDN Dictionary.Enumerator:

只要集合保持不变,枚举器仍然有效.如果对集合进行了更改(例如添加,修改或删除元素),则枚举数将无法恢复,并且其行为未定义.

不过,这很容易解决这个问题.只需复制一个字典(或它的键)并迭代它,添加/删除/等.根据需要从原始字典.



1> tvanfosson..:

这是因为构造枚举器的方式.

来自MSDN Dictionary.Enumerator:

只要集合保持不变,枚举器仍然有效.如果对集合进行了更改(例如添加,修改或删除元素),则枚举数将无法恢复,并且其行为未定义.

不过,这很容易解决这个问题.只需复制一个字典(或它的键)并迭代它,添加/删除/等.根据需要从原始字典.



2> Otávio Décio..:

枚举时不能修改字典,这很简单.否则什么时候知道你已经完成了?



3> dr. evil..:

如果你想这样做,你应该得到一个Dictionary对象的副本(可以通过多种方式完成),然后枚举它,添加你想要的原始对象.

简单地说,您无法在枚举词典时添加新项目.

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有