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

Lyn*_*nct 7 c# linq

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

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

Tim*_*ter 28

不能使用foreach删除项枚举过程中,你要在运行时异常.

你可以使用List.RemoveAll:

list.RemoveAll(x => x.Number == 1);
Run Code Online (Sandbox Code Playgroud)

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

list = list.Where(x => x.Number != 1).ToList();
Run Code Online (Sandbox Code Playgroud)

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

var item = list.FirstOrDefault(x => x.Number == 1);
if(item ! = null) list.Remove(item);
Run Code Online (Sandbox Code Playgroud)

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

  • 在这种情况下,您实际上可以使用 foreach,因为只有一项要删除。只需确保在删除项目后使用 break 退出循环,否则您将在下一次迭代中遇到异常。也就是说,我认为使用 RemoveAll() 的解决方案更优雅。 (2认同)