IEnumberable<Car> list
,我想基於汽車的屬性,從這個列表中刪除的項
我想是這樣的:
list.RemoveWhere(r=>r.Year > 2000)
做這樣的事情存在嗎?
我這樣做一遍又一遍,所以我想避免每次複製列表中只刪除一個項目
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<T>
工作,怎麼樣在哪裏?
list = list.Where(car => car.Year <= 2000);
如果您正在使用ICollection<T>
工作,你不只是得到一個過濾的結果,但真的打算操縱源集合,你可以創建自己定製的擴展集:
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;
}
}
看到更新的問題 – leora 2010-07-24 14:22:56
看到我更新的答案;-) – 2010-07-24 14:34:24
非常遲到了,但對於任何一個會遇到這個問題,這裏是一個清晰的解決方案:
MyList.RemoveAll(p => p.MyProperty == MyValue);
它是一個'清單'或只是一個IEnumerable的''? –
2010-07-24 14:26:42