在 C# 中修改 foreach 循环内的列表
在 4.0 之前的 C# 版本中,尝试在 foreach 循环内修改列表会导致异常。但是,在 .NET 4.0 中,此限制被取消了。
问题:
给定以下代码,在使用 foreach 循环迭代其嵌套的 Enumerable 时,向项目列表添加项目的最佳方法是什么?
<code class="language-csharp">foreach (var item in Enumerable) { foreach (var item2 in item.Enumerable) { item.Add(new item2); // 这行代码有问题 } }</code>
最佳实践:
在 foreach 循环中使用的集合在设计上是不可变的。因此,不能在迭代期间直接修改它。为了安全地修改列表,建议改用传统的 for 循环。
解释:
MSDN 文档指出,foreach 语句用于迭代集合。虽然它不会隐式地向源集合添加或删除项目,但它也警告不要依赖此行为,因为存在潜在的副作用。如果您需要修改源集合,建议的方法是使用 for 循环。
并发集合异常:
问题中引用的 Paul Jackson 博客文章指出,在 C# 并发集合中允许在 foreach 循环内修改集合。这种例外情况源于并发集合是线程安全的,并且以不同的方式处理潜在的副作用。 因此,此规则不适用于并发集合。 对于普通集合,仍然建议使用 for
循环以避免潜在的问题。
以上是如何在 C# 中使用 Foreach 循环进行迭代时安全地将项目添加到列表中?的详细内容。更多信息请关注PHP中文网其他相关文章!