foreach (string key in dbFields.Keys)
dbFields[key] = MySqlHelper.EscapeString(dbFields[key]);
我收到一个 InvalidOperationException 错误,声称集合已被修改。 为什么它认为 Keys 集合已被修改?
我只想将函数应用于字典的所有值-_-
我知道如果我使用第二本词典我可以做到这一点。我只是想知道是否有一种简洁优雅的方式来修改字典中的所有值(无需显式创建第二个值)。
最佳答案
试试这个:
foreach (string key in dbFields.Keys.ToList())
dbFields[key] = MySqlHelper.EscapeString(dbFields[key]);
您不能修改正在迭代的集合,ToList()
在这种情况下将创建一个新的 List<string>
对你来说,你正在迭代,所以你可以安全地修改字典。
关于评论 - 来自 MSDN :
The Dictionary.KeyCollection is not a static copy; instead, the Dictionary.KeyCollection refers back to the keys in the original Dictionary. Therefore, changes to the Dictionary continue to be reflected in the Dictionary.KeyCollection.
所以这取决于索引器的实现(dbFields[key] = ...
)如果 Dictionary 认为键集合已经改变(显然它确实如此,因为有一个异常(exception)) - 不幸的是我现在手头没有 Reflector 否则我可以检查。
关于c# - 在字典的值集合上应用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5749460/