为什么在迭代字典的项目并修改其值时,是否有必要临时将密钥保存到列表中?

gaa*_*kam 2 .net c# dictionary

这个答案:

foreach (var key in dict.Keys.ToList())
{
    dict[key] = false;
}
Run Code Online (Sandbox Code Playgroud)

对ToList()的调用使这个工作,因为它正在拉出并(暂时)保存键列表,因此迭代工作.

为什么ToList()这里需要打电话?

我们正在修改值,而不是钥匙,而且,我最了解,仅modyfying设定一个词典的按键会打破遍历所有键.特别是 - 对我来说,可能是错误的理解 - 只有当我们在字典中添加或删除项目时才能改变键的顺序,我们没有这样做.

Dan*_*ite 5

如果您阅读参考源Dictionary<TKey, TValue>.Insert,你会看到它的递增version而枚举集驱动警卫领域.