foreach (string key in dbFields.Keys)
dbFields[key] = MySqlHelper.EscapeString(dbFields[key]);
我收到InvalidOperationException错误,声称该集合已被修改。 为什么认为Keys系列已被修改?
我只想将该函数应用于字典-_-
的所有值我知道如果我使用第二本字典,我可以这样做。我只是想知道是否有一种简单优雅的方式来修改字典中的所有值(没有明确地创建第二个)。
答案 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方便,否则我可以检查一下。