在Dictionary的值集合上应用函数

时间:2011-04-21 20:30:31

标签: c# .net

foreach (string key in dbFields.Keys)
     dbFields[key] = MySqlHelper.EscapeString(dbFields[key]);

我收到InvalidOperationException错误,声称该集合已被修改。 为什么认为Keys系列已被修改?

我只想将该函数应用于字典-_-

的所有值

我知道如果我使用第二本字典,我可以这样做。我只是想知道是否有一种简单优雅的方式来修改字典中的所有值(没有明确地创建第二个)。

1 个答案:

答案 0 :(得分:7)

试试这个:

foreach (string key in dbFields.Keys.ToList())
     dbFields[key] = MySqlHelper.EscapeString(dbFields[key]);

您无法修改正在迭代的集合,ToList()在这种情况下将为您迭代的人创建一个新的List<string>,因此您可以安全地修改字典。

关于评论 - 来自MSDN

  

Dictionary.KeyCollection不是静态的   复制;相反,Dictionary.KeyCollection引用回   原来的钥匙   字典。因此,   对词典的更改继续反映在   Dictionary.KeyCollection。

所以它取决于索引器(dbFields[key] = ...)的实现,如果Dictionary认为密钥集合发生了变化(显然它确实存在异常) - 不幸的是我现在没有Reflector方便,否则我可以检查一下。