foreach
循环中的列表:最佳实践虽然 C# .NET 4.0 及更高版本在修改 foreach
循环内的枚举时不会引发异常,但直接在循环内添加项目可能会导致不可预测的行为。 本文探讨了在迭代期间将项目添加到列表的有效且可靠的方法。
使用临时 IList
作为缓冲区的常见方法是可行的,但并不总是最有效或最优雅的解决方案。 核心问题源于通过 foreach
访问的集合的不可变性质。 正如 MSDN 所阐明的: foreach
是为检索数据而设计的;由于潜在的不一致,不鼓励在迭代期间添加或删除元素。
为什么要避免直接修改foreach
?
foreach
循环在循环开始时迭代集合状态的快照。 添加项目会直接修改底层集合,可能导致迭代器跳过元素或遇到意外异常。
推荐方法:使用for
循环
对于在迭代时添加或删除项目,for
循环提供了最可预测和最有效的解决方案。 它提供对索引的直接控制并允许安全修改。
并发集合:一个特例
并发集合的使用(如 ConcurrentBag
或 ConcurrentQueue
)是一个例外。这些集合是为线程安全修改而设计的,在迭代期间添加项目可能是允许的,但这应该仔细考虑,并且仅在线程安全至关重要时使用。
总之,虽然在较新的 C# 版本中,在技术上可以在 foreach
循环期间添加项目,但通常最好的做法是使用 for
循环来实现此目的,以保持代码的清晰度、效率并避免意外结果。 并发集合为特定的多线程场景提供了替代方案。
以上是如何在 C# `foreach` 循环期间有效地将项目添加到列表中?的详细内容。更多信息请关注PHP中文网其他相关文章!