使用 LINQ 从列表中删除特定项

本文关键字:删除 LINQ 列表 使用 | 更新日期: 2023-09-27 18:32:21

我有一个包含一些对象的列表,并希望使用 LINQ 删除特定项目,但不确定如何做到这一点。

foreach (var someobject in objectList)
{
    if (someobject.Number == 1) // There will only one item where Number == 1.  
    {
        list.remove(someobject)
    } 
}

使用 LINQ 从列表中删除特定项

不能在枚举期间使用 foreach 删除项,否则在运行时会出现异常。

您可以使用List.RemoveAll

list.RemoveAll(x => x.Number == 1);

或者,如果它实际上不是List<T>而是任何序列,则 LINQ:

list = list.Where(x => x.Number != 1).ToList();

如果您确定只有一个项目具有该编号,或者您想最多删除一个项目,您可以使用另一个答案中建议的 for 循环方法或以下内容:

var item = list.FirstOrDefault(x => x.Number == 1);
if(item ! = null) list.Remove(item);

指向我发布的另一个问题的链接表明,您可以在 C# 4 及更高版本的枚举期间修改集合。不,你不能。这仅适用于新的并发集合。

不能使用 foreach 从集合中删除项目。这将引发集合已修改的异常。

您可以使用

for (int i=objectList.Count-1; i>=0 ; i--)
{
    if (objectList[i].Number == 1) // there will only one item with Number = 1   
    {
       objectList.Remove(objectList[i]);
    } 
}

另一种情况是使用Remove/RemoveAll,例如Tim Schmelter节目。

您可以使用 foreach 循环从列表中删除项目。重要的是在删除项目后使用中断来停止循环。如果从列表中删除项目后循环继续,则会引发异常。

foreach (var someobject in objectList)
{
    if (someobject.Number == 1) // There will only one item where Number == 1
    {
        objectList.remove(someobject);
        break;
    } 
}

但是,这仅在您只想删除一个对象时才有效,就像您的情况一样。

如果值满足条件,则可以在索引处删除

for (int i=0; i < objectList.Count; i ++)
{
    if (objectList[i].Number == 1) // there will only one item with Number = 1   
    {
       objectList.RemoveAt[i];
    } 
}