如果我想循环一个字典(键,值)...为什么我不能在循环中添加一个新的键值对?
Dictionarypersons = 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:
只要集合保持不变,枚举器仍然有效.如果对集合进行了更改(例如添加,修改或删除元素),则枚举数将无法恢复,并且其行为未定义.
不过,这很容易解决这个问题.只需复制一个字典(或它的键)并迭代它,添加/删除/等.根据需要从原始字典.
这是因为构造枚举器的方式.
来自MSDN Dictionary.Enumerator:
只要集合保持不变,枚举器仍然有效.如果对集合进行了更改(例如添加,修改或删除元素),则枚举数将无法恢复,并且其行为未定义.
不过,这很容易解决这个问题.只需复制一个字典(或它的键)并迭代它,添加/删除/等.根据需要从原始字典.
枚举时不能修改字典,这很简单.否则什么时候知道你已经完成了?
如果你想这样做,你应该得到一个Dictionary对象的副本(可以通过多种方式完成),然后枚举它,添加你想要的原始对象.
简单地说,您无法在枚举词典时添加新项目.