原代码:
foreach (Node n in openNode)
{
if (n.GetFCost() < minFValue)
{
minFValue = n.GetFCost();
openNode.Remove(n);
closeNode.Add(n);
}
}
里面的Remove和Add方法会报错:InvalidOperationException: Collection was modified; enumeration operation may not execute.(集合已修改)
查了一下,因为foreach的迭代变量是只读的,所以修改成for循环即可:
for (int index = 0; index < openNode.Count; index++)
{
Node n = openNode[index];
if (n.GetFCost() < minFValue)
{
minFValue = n.GetFCost();
openNode.Remove(n);
closeNode.Add(n);
}
}
博客讨论了在使用Foreach循环时尝试从集合中移除元素导致的InvalidOperationException错误。作者指出,由于Foreach迭代变量是只读的,直接在循环中修改集合会导致此错误。解决方法是将Foreach替换为For循环,从而避免枚举过程中集合被修改的问题。
9159

被折叠的 条评论
为什么被折叠?



