我想知道,因为我计划在链表中使用枚举器,并希望能够在程序运行期间将数据更改为某个值时删除节点。但是由于枚举器会让它的MoveNext()得到列表中的下一个节点,我想知道在Current的get之后调用MoveNext()。
换句话说,如果没有链接列表枚举器在删除后立即停止,这是否可行。
foreach (Node<Object> it in myLinkedList)
{
if (it.data().isGone())
{
myLinkedList.remove(it);
}
}
public boolean remove(Node<E> node)
{
node.setData(node.next().data());
node.setNext(node.next().next());
}
答案 0 :(得分:4)
根据IEnumerator<T>
的文档,如果在创建枚举数后修改了集合,MoveNext()
方法将抛出InvalidOperationException
。
即使您实现了自己的枚举器(不包括.NET中的少数几个),也不应该修改枚举该集合元素的foreach
语句内的集合。 ,因为这是一个直接的视觉指示,表明您的代码可能会抛出异常。