首页 >后端开发 >C++ >如何在 C# `foreach` 循环期间有效地将项目添加到列表中?

如何在 C# `foreach` 循环期间有效地将项目添加到列表中?

Linda Hamilton
Linda Hamilton原创
2025-01-27 13:26:09960浏览

How Can I Efficiently Add Items to a List During a C# `foreach` Loop?

在 C# 中修改 foreach 循环中的列表:最佳实践

虽然 C# .NET 4.0 及更高版本在修改 foreach 循环内的枚举时不会引发异常,但直接在循环内添加项目可能会导致不可预测的行为。 本文探讨了在迭代期间将项目添加到列表的有效且可靠的方法。

使用临时 IList 作为缓冲区的常见方法是可行的,但并不总是最有效或最优雅的解决方案。 核心问题源于通过 foreach 访问的集合的不可变性质。 正如 MSDN 所阐明的: foreach 是为检索数据而设计的;由于潜在的不一致,不鼓励在迭代期间添加或删除元素。

为什么要避免直接修改foreach

foreach 循环在循环开始时迭代集合状态的快照。 添加项目会直接修改底层集合,可能导致迭代器跳过元素或遇到意外异常。

推荐方法:使用for循环

对于在迭代时添加或删除项目,for 循环提供了最可预测和最有效的解决方案。 它提供对索引的直接控制并允许安全修改。

并发集合:一个特例

并发集合的使用(如 ConcurrentBagConcurrentQueue)是一个例外。这些集合是为线程安全修改而设计的,在迭代期间添加项目可能是允许的,但这应该仔细考虑,并且仅在线程安全至关重要时使用。

总之,虽然在较新的 C# 版本中,在技术上可以在 foreach 循环期间添加项目,但通常最好的做法是使用 for 循环来实现此目的,以保持代码的清晰度、效率并避免意外结果。 并发集合为特定的多线程场景提供了替代方案。

以上是如何在 C# `foreach` 循环期间有效地将项目添加到列表中?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn