使用 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)
}
}
不能在枚举期间使用 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];
}
}