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

时间:2014-11-28 20:10:10

标签: c# linq

我有一个包含某些对象的列表,并希望使用LINQ删除特定项目但不知道该怎么做。

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

4 个答案:

答案 0 :(得分:27)

枚举期间您cannot use a foreach to remove items,您在运行时收到异常。

您可以使用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及更高版本的枚举期间修改集合。不,你不能。 That applies only to the new concurrent collections

答案 1 :(得分:3)

您无法使用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 show。

答案 2 :(得分:1)

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

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

但是,如果您只想删除一个对象,则此功能仅适用。

答案 3 :(得分:-1)

如果值符合条件,您可以在索引处删除

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