根据某些条件从列表中删除多个对象

时间:2011-02-17 01:14:11

标签: c#

我偶然发现了一些代码,它试图从符合特定条件的列表中删除对象。

有一个已经创建过的东西的所有对象列表:

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();

有更好的方法吗?我知道你不能简单地在第一个循环中执行删除操作,但肯定必须有一个更聪明的方法来执行此操作。

3 个答案:

答案 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);
    }
  }
}