在c#中,当我想从列表中删除某些项目时,我会按以下方式执行此操作,
List<Item> itemsToBeRemoved = new List<Item>();
foreach(Item item in myList)
{
if (IsMatching(item)) itemsToBeRemoved.Add(item);
}
foreach(Item item in itemsToBeRemoved)
{
myList.Remove(item);
}
有没有更好的方法呢?
答案 0 :(得分:21)
好吧,你可以调用完全符合你想要的方法。
myList.RemoveAll(IsMatching);
一般来说,使用完全符合您想要的方法而不是自己重新发明它的方法会“更好”。
答案 1 :(得分:12)
myList.RemoveAll(x=> IsMatching(x));
答案 2 :(得分:2)
使用Linq有点改进。
var itemsToRemove = myList.Where(item => IsMatching(item)).ToList();
foreach(Item item in itemsToBeRemoved)
{
myList.Remove(item);
}
答案 3 :(得分:1)
如何恢复逻辑,添加不匹配的项目,只使用结果集合?
List<Item> itemsTaken = new List<Item>();
foreach(Item item in myList)
{
if (!IsMatching(item)) itemsTaken.Add(item);
}
// use itemsTaken as if it were myList with items removed
答案 4 :(得分:1)
我以前做的是创建一个反向for循环:
for (int i=myList.Count-1; i>=0; i--)
{
if (IsMatching(myList[i]))
myList.RemoveAt(i);
}
但我确信使用LINQ有更优雅的方式。
答案 5 :(得分:0)
类似于Jakers所说的,假设你在.Net 3:
myList = myList.Where(item => !IsMatching(item)).ToList();
答案 6 :(得分:0)
foreach(Item singleItem in new List<Item>(allItems))
{
if(IsMatching(singleItem))
allItems.Remove(singleItem);
}