我想知道,因为我计划在链表中使用枚举器,并且希望能够在程序运行期间将其数据更改为特定值时删除节点。但是,由于枚举器将其MoveNext()获取列表中的下一个节点,我想知道MoveNext()是否在Current的get之后被调用。
换句话说,如果链表枚举器在删除操作后立即停止,这个操作是否有效?
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());
}
根据IEnumerator<T>
的文档,如果在创建枚举器后修改了集合,MoveNext()
方法将抛出InvalidOperationException
。
IEnumerator<T>.MoveNext()
即使你实现了你自己的枚举器,它的行为不是这样的(包括。net中包含的一些选择),你也不应该修改foreach
语句中枚举该集合元素的集合,因为这是一个直接的视觉指示,你的代码很可能抛出异常。