我有一个包含一些对象的列表,想使用LINQ来删除特定的项目,但不确定如何做到这一点。
foreach (var someobject in objectList)
{
if (someobject.Number == 1) // There will only one item where Number == 1.
{
list.remove(someobject)
}
}
在枚举过程中,您不能使用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来执行此操作。
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
所展示的那样。
break
,那么没有理由将 foreach
循环转换为 for
循环。 - Rawling您可以使用 foreach 循环从列表中删除项。重要的是要使用 break 来在删除项后停止循环。如果循环在从列表中删除项后继续进行,将抛出异常。
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];
}
}
list.remove(someobject)
。 - stakx - no longer contributing