我有一个包含某些对象的列表,并希望使用LINQ删除特定项目但不知道该怎么做。
foreach (var someobject in objectList)
{
if (someobject.Number == 1) // There will only one item where Number == 1.
{
list.remove(someobject)
}
}
答案 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];
}
}