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

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");
}
有帮助吗?

解决方案

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

在枚举词典时,您无法添加新项目。

其他提示

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

来自MSDN Dictionary.Enumerator

  

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

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

枚举时无法修改字典,就像那样简单。否则什么时候知道你已经完成了?

枚举集合(即foreach循环)时,无法在集合中添加或删除项目。想想如果允许的话会带来的所有问题。

那只是......很奇怪。您正在尝试为字典中已有的每个人再次添加同一个人。

另外:为什么将年龄存储为字符串? int(甚至DateTime)似乎更合适。

因为它会更改您正在滚动的词典的项目... 它毫无意义......(你可以永远循环)

您正在尝试在迭代循环时更改集合中的条目数。 for循环可以实现这一点,但是foreach迭代器不允许你这样做。

Dictionary<string, string> persons = new Dictionary<string, string>();
persons.Add("roger", "12");
persons.Add("mary", "13");
for (int i = 0; i < persons.Count; i++){ 
Console.WriteLine("Name: " + persons[i].Key + ", Age: " + persons[i].Value); 
persons.Add("Xico", "22");
}

请注意,这是一个无限循环,因为您总是在到达最后一个条目之前添加一个人。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top