Если я имею
IEnumberable<Car> list
и я хочу удалить объект из этого списка на основе свойства автомобиля
я хочу что-то как:
list.RemoveWhere(r=>r.Year > 2000)
что-то вроде этого существует?
я делаю это много раз, таким образом, я не хочу копировать список каждый раз, чтобы просто удалить один объект
IEnumberable
является неизменным, но вы можете сделать что-то вроде этого:
list = list.Where(r=>r.Year<=2000)
или написать метод расширения:
public static IEnumerable<T> RemoveWhere<T>(this IEnumerable<T> query, Predicate<T> predicate)
{
return query.Where(e => !predicate(e));
}
Если вы работаете с IEnumerable
, как насчет «Где?»
list = list.Where(car => car.Year <= 2000);
Если вы работаете с ICollection
и вы не только получить отфильтрованный результат, но и действительно намереваться манипулировать исходной коллекцией, вы можете создать собственное индивидуальное расширение для коллекции:
public static class CollectionExtensions {
public static ICollection<T> RemoveWhere<T>(this ICollection<T> collection, Func<T, bool> predicate) {
List<T> toRemove = collection.Where(item => predicate(item)).ToList();
toRemove.ForEach(item => collection.Remove(item));
return collection;
}
}