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

发布于 2024-12-04 12:01:50 字数 212 浏览 2 评论 0原文

我可以安全地修改 - 我的意思是:删除并重新添加到不同的索引位置 - 我在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

相权↑美人 2024-12-11 12:01:50

IEnumerator 规范表示你不能:

只要集合保持不变,枚举器就保持有效。如果对集合进行更改,例如添加、修改或删除元素,则枚举器将不可恢复地失效,并且其行为未定义。

有些集合可能不遵循此规则。

The IEnumerator<T> spec says that you can't:

An enumerator remains valid as long as the collection remains unchanged. If changes are made to the collection, such as adding, modifying, or deleting elements, the enumerator is irrecoverably invalidated and its behavior is undefined.

Some collections might not follow this rule.

暮倦 2024-12-11 12:01:50

正如您所描述的那样,您无法在迭代集合时修改集合;即,如果没有出现“集合已修改”等异常,则无法删除项目。

这并不是说您根本无法修改这些项目(执行除添加/删除之外的操作)。

如果遇到此错误,请尝试重构代码,例如使用 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).

无法言说的痛 2024-12-11 12:01:50

不,你不能。而是制作该集合的副本以便随后编辑和使用该副本。

No you can't. Rather make a copy of the collection to edit and use the copy afterwards.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文