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

时间:2013-05-24 02:10:56

标签: c# linked-list enumerator

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

1 个答案:

答案 0 :(得分:4)

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

IEnumerator<T>.MoveNext()

即使您实现了自己的枚举器(不包括.NET中的少数几个),也不应该修改枚举该集合元素的foreach语句内的集合。 ,因为这是一个直接的视觉指示,表明您的代码可能会抛出异常。