我可以在迭代它时使用For Each安全地修改VB集合的项目吗?

时间:2011-09-13 15:03:30

标签: vb.net collections iterator

我可以安全地修改 - 我的意思是:删除并重新添加不同的索引位置 - 我在VB中使用For Each循环迭代的任何项目?我们正在谈论VB Microsoft.VisualBasic.Collection类。

如果是的话:这是我在构建的设计或实施细节吗?

我可能懒得去搜索,但dox似乎对此没有任何说法。

3 个答案:

答案 0 :(得分:2)

IEnumerator<T> spec表示你不能:

  

只要集合保持不变,枚举器仍然有效。如果对集合进行了更改,例如添加,修改或删除元素,则枚举数将无法恢复,并且其行为未定义。

某些馆藏可能不遵循此规则。

答案 1 :(得分:2)

在您描述的过程中,您无法修改集合;即,如果没有收到例如“集合已被修改”的异常,则无法删除项目。

这并不是说你根本不能修改这些项目(做一些除了添加/删除之外的事情)。

如果您遇到此错误,请尝试重构您的代码,例如:使用for循环(通常反过来,以避免偏移索引计数器)。

答案 2 :(得分:0)

不,你不能。而是制作集合的副本以便编辑并在之后使用副本。