Alp*_*der 1 c# collections invalidoperationexception concurrentmodification
下面的代码的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]--;
}
}
Run Code Online (Sandbox Code Playgroud)
我看不出这是怎么可能的,因为颜色在初始化后永远不会被修改.
它是字典键的视图......你在这里修改字典:
colorDictionary[c]--;
Run Code Online (Sandbox Code Playgroud)
不可否认,实际上并没有添加或删除任何密钥 - 但它正在修改字典,而密钥枚举器基本上对此敏感.
最简单的解决方法就是创建一个副本:
IEnumerable<Color> colors = colorDictionary.Keys.ToList();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
90 次 |
最近记录: |