foreach (string key in dbFields.Keys)
dbFields[key] = MySqlHelper.EscapeString(dbFields[key]);
Run Code Online (Sandbox Code Playgroud)
我收到一个InvalidOperationException错误声明该集合已被修改.为什么认为Keys系列已被修改?
我只想将函数应用于字典的所有值-_-
我知道如果我使用第二本字典,我可以这样做.我只是想知道是否有一种简单优雅的方式来修改字典中的所有值(没有明确地创建第二个).
试试这个:
foreach (string key in dbFields.Keys.ToList())
dbFields[key] = MySqlHelper.EscapeString(dbFields[key]);
Run Code Online (Sandbox Code Playgroud)
您无法修改正在迭代的集合,ToList()在这种情况下将为您迭代创建一个新List<string>的,因此您可以安全地修改字典.
关于评论 - 来自MSDN:
Dictionary.KeyCollection不是静态副本; 相反,Dictionary.KeyCollection引用原始字典中的键.因此,对Dictionary的更改将继续反映在Dictionary.KeyCollection中.
所以它取决于indexer(dbFields[key] = ...)的实现,如果Dictionary认为密钥集合发生了变化(显然它确实存在异常) - 不幸的是我现在没有Reflector方便,否则我可以检查.