我可以在迭代(使用 For Each)时安全地修改 VB 集合的项目吗?
我可以安全地修改 - 我的意思是:删除并重新添加到不同的索引位置 - 我在 VB 中使用 For Each
循环迭代的任何项目吗?我们正在谈论 VB Microsoft.VisualBasic.Collection
类。
如果是:这是我正在构建的设计使然,还是实现细节?
我可能懒得去仔细搜索,但 dox 似乎没有对此说什么。
Can I safely modify -I mean: remove and re-add on a different index position- any item that I iterate over using a For Each
loop in VB? We are talking about the VB Microsoft.VisualBasic.Collection
class.
And if yes: Is this by design, or an implementational detail, that I am building upon then?
I might be too lazy to search hard enough, but the dox don't seem to say anything about this.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
IEnumerator
规范表示你不能:有些集合可能不遵循此规则。
The
IEnumerator<T>
spec says that you can't:Some collections might not follow this rule.
正如您所描述的那样,您无法在迭代集合时修改集合;即,如果没有出现“集合已修改”等异常,则无法删除项目。
这并不是说您根本无法修改这些项目(执行除添加/删除之外的操作)。
如果遇到此错误,请尝试重构代码,例如使用
for
循环(通常相反,以避免偏移索引计数器)。You can't modify a collection whilst iterating through it as you describe; i.e. you can't remove an item without getting an exception such as "collection was modified".
That's not to say you can't modify the items at all (do something other than add/remove).
If you run into this error, try refactoring your code e.g. using a
for
loop (often in reverse, to avoid offsetting the index counter).不,你不能。而是制作该集合的副本以便随后编辑和使用该副本。
No you can't. Rather make a copy of the collection to edit and use the copy afterwards.