首页 > 后端开发 > C++ > 如何在 C# 中使用 Foreach 循环进行迭代时安全地将项目添加到列表中?

如何在 C# 中使用 Foreach 循环进行迭代时安全地将项目添加到列表中?

Susan Sarandon
发布: 2025-01-27 13:31:12
原创
389 人浏览过

How to Safely Add Items to a List While Iterating with a Foreach Loop in C#?

在 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板