我偶然发现了一些代码,它试图从符合特定条件的列表中删除对象。
有一个已经创建过的东西的所有对象列表:
List<Foo> FooList = new List<Foo>()
FooList.Add(...)
FooList.Add(...)
在其他一些功能中,他们接着删除了一些对象:
List<Foo> RemovedFoo = new List<Foo>()
foreach (Foo f in FooList
if (f.Condition)
RemoveFoo.Add(f);
foreach (Foo f in RemovedFoo)
FooList.Remove(f);
RemovedFoo.Clear();
有更好的方法吗?我知道你不能简单地在第一个循环中执行删除操作,但肯定必须有一个更聪明的方法来执行此操作。
答案 0 :(得分:12)
您可以使用List<T>.RemoveAll
:
FooList.RemoveAll(f => f.Condition);
答案 1 :(得分:2)
FooList.RemoveAll(ele => ele.Condition);
请注意,这是List<T>
特有的。
如果你有一般的集合,你可以使用LINQ:
var newCollection = FooList.Where(ele => !ele.Condition);
答案 2 :(得分:-2)
尝试扩展方法......
public static class CollectionHelpers {
public static void RemoveWhere<T>(this IList<T> list, Func<T, bool> selector) {
var elementsToRemove = list.Where(expression).ToList();
foreach (var element in list) {
list.Remove(element);
}
}
}