下面的代码的foreach语句引发一个InvalidOperationException,该异常表示“集合已被修改。枚举操作无法执行。”我看不到这是怎么可能的,因为初始化后颜色永远无法修改。
Dictionary<Color, int> colorDictionary = new Dictionary<Color, int>();
//Put stuff in colorDictionary...
int currentBest = 257;
Color replaceColor = Color.Empty;
Dictionary<Color, int>.KeyCollection colors = colorDictionary.Keys;
foreach (Color c in colors)
{
if (colorDictionary[c] == 0)
{
continue;
}
if (ColorDistance(color, c) < currentBest)
{
replaceColor = c;
colorDictionary[c]--;
}
}
最佳答案
我看不到这是怎么可能的,因为初始化后颜色永远无法修改。
这是字典键的视图...,您在这里修改字典:
colorDictionary[c]--;
诚然,实际上并没有添加或删除任何键-而是在修改字典,并且键枚举器对此基本敏感。
最简单的解决方法是创建副本:
IEnumerable<Color> colors = colorDictionary.Keys.ToList();