0

我想知道,因为我计划对链表使用枚举器,并且希望能够在程序运行期间其数据更改为某个值时删除节点。但是由于枚举器将使其 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());
}
4

1 回答 1

4

根据文档,如果在创建枚举器后修改了集合IEnumerator<T>,该MoveNext()方法将抛出一个。InvalidOperationException

IEnumerator<T>.MoveNext()

即使您实现自己的不以这种方式运行的枚举器(包括 .NET 中包含的少数几个),您也不应该修改foreach枚举该集合元素的语句中的集合,因为这是一个直接的视觉指示您的代码可能会引发异常。

于 2013-05-24T02:16:21.127 回答