如何正确地从列表中删除项目

Krz*_*ter 6 c#

可能重复:
迭代时收集异常并从该集合中删除项目
如何在迭代时从泛型列表中删除元素?
从列表中删除匹配项的更好方法

// tmpClientList is List<Client> type

if (txtboxClientName.Text != "")
    foreach (Client cli in tmpClientList)
        if (cli.Name != txtboxClientName.Text)
            tmpClientList.Remove(cli);
Run Code Online (Sandbox Code Playgroud)

错误:"集合已被修改;枚举操作可能无法执行."

如何以一种简单的方式从列表中删除项目,而不保存这些项目在另一个列表或数组中的索引,并在代码中的其他位置删除它们.尝试了RemoveAt(索引)但它完全相同的情况,修改循环运行时.

Jam*_*iec 11

向后移动列表..这样删除项目不会影响下一个项目.

for(var i=tmpClientList.Count-1;i>=0;i--)
{
   if (tmpClientList[i].Name != txtboxClientName.Text)
            tmpClientList.RemoveAt(i);

}
Run Code Online (Sandbox Code Playgroud)


bdu*_*kes 11

在a上List<T>,有一个RemoveAll方法可以使委托指示是否删除该项.你可以像这样使用它:

tmpCLientList.RemoveAll(cli => cli.Name != txtboxClientName.Text);
Run Code Online (Sandbox Code Playgroud)


Rox*_*Rox 1

问题是您正在尝试在 foreach 迭代中修改列表。将其替换为 for 就可以了。

另外,由于您似乎使用用户输入的名称,请考虑稍微清理一下输入,至少使用 Trim() 来删除多余的空格。如果不这样做,“John”和“John”将是两个不同的东西。与初始 != "" 检查相同。


归档时间:

查看次数:

2704 次

最近记录:

15 年,5 月 前