在Dictionary的值集合上应用函数

Jos*_*eld 2 .net c#

foreach (string key in dbFields.Keys)
     dbFields[key] = MySqlHelper.EscapeString(dbFields[key]);
Run Code Online (Sandbox Code Playgroud)

我收到一个InvalidOperationException错误声明该集合已被修改.为什么认为Keys系列已被修改?

我只想将函数应用于字典的所有值-_-

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

Bro*_*ass 7

试试这个:

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方便,否则我可以检查.