枚举器的方法按什么顺序调用?



我想知道,因为我计划在链表中使用枚举器,并且希望能够在程序运行期间将其数据更改为特定值时删除节点。但是,由于枚举器将其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语句中枚举该集合元素的集合,因为这是一个直接的视觉指示,你的代码很可能抛出异常。

相关内容

  • 没有找到相关文章

最新更新