首页 > 解决方案 > 从 Foreach 中的集合中删除单个元素

问题描述

只是想知道在 foreach 循环中从集合中删除单个元素而不保存它以在循环外执行是否不安全/错误形式/只是看起来很脏。我知道如果你必须继续迭代,它可能会打破循环(在某些情况下,只是抛出一个错误),但在这种情况下你不需要再次迭代,因为当你找到你是什么时你正在使用一个 break 语句寻找。

例子:

List<string> strings = new List<string>() { "A", "B", "C" };
foreach(string s in strings)
{
    if (s == "B")
    {
        strings.Remove("B");
        break;
    }
}

这很糟糕吗?我通常会将其编写为一个向后循环或将 stringToRemove 缓存在一个变量中(显然名称为 stringToRemove),但只是想知道其他人对此有何感觉。

标签: c#collectionssyntax

解决方案


而不是使用foreach循环并且有一些混乱/hacky的代码。只需将其与方法一行RemoveAll()

strings.RemoveAll(x => x == "B");

在这里提琴


推荐阅读