【问题标题】:How can foreach know the iterated collection was modified?foreach 怎么知道迭代的集合被修改了?
【发布时间】:2010-10-04 06:17:53
【问题描述】:

当我用foreach 修改我正在迭代的集合时,我遇到了一个异常。所以我只是好奇foreach(或运行时)如何检测到它。普通对象可以这样做吗?

【问题讨论】:

  • 我不确定 C#,但在 Java 世界中,foreach 构造只是普通迭代器的语法粘合剂......因此,如果在迭代期间修改了集合,则会引发 ConcurrentModificationException。看来这正是这里的情况。

标签: c# foreach


【解决方案1】:

集合本身必须检测到它。在标准库集合中,这是通过拥有一个内部版本号来实现的,该版本号由每个操作修改,并在每次迭代时由迭代器检查(即每次调用 MoveNext 时,它会检查版本号是否与它相同是创建迭代器的时间)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 2013-05-13
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多