在Dictionary's值集合上应用函数

本文关键字:集合 应用 函数 Dictionary | 更新日期: 2023-09-27 17:52:34

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

我得到InvalidOperationException错误,声称集合已被修改。为什么它认为Keys集合被修改了?

我只想把这个函数应用到字典中所有的值-_-

我知道如果我使用第二本字典我可以做到这一点。我只是想知道是否有一种紧凑的简单优雅的方法来修改字典中的所有值(而不显式地创建第二个)。

在Dictionary's值集合上应用函数

试试这个:

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

你不能修改你正在迭代的集合,在这种情况下ToList()会为你创建一个新的List<string>,所以你可以安全地修改字典。

关于来自MSDN的评论:

字典。KeyCollection不是静态的复制;取而代之的是字典。KeyCollection引用回原来的钥匙字典。因此,词典的变化继续反映在Dictionary.KeyCollection。

所以它取决于索引器(dbFields[key] = ...)的实现,如果字典认为键集合改变了(显然它确实因为有一个例外)-不幸的是,我没有Reflector在手此刻,否则我可以只是检查。