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

Ped*_*Luz 2 c# foreach dictionary

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

Dictionary<string, string> persons = new Dictionary<string, string>();

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

foreach (KeyValuePair<string,string> person in persons)
{
 Console.WriteLine("Name: " + person.Key + ", Age: " + person.Value);
 persons.Add("Xico", "22");
}
Run Code Online (Sandbox Code Playgroud)

tva*_*son 21

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

来自MSDN Dictionary.Enumerator:

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

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


Otá*_*cio 8

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


dr.*_*vil 7

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

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