【发布时间】:2011-08-18 18:56:50
【问题描述】:
我目前正在尝试编写一个扩展方法,但它似乎没有按预期运行。在我们深入研究之前,这是我的代码:
public static void Remove<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
var items = source.Where(predicate);
source = source.Where(t => !items.Contains(t));
}
希望我可以在任何 IEnumerable 上调用此扩展方法,然后从集合中删除与谓词匹配的所有项目。我厌倦了遍历集合以找到匹配的项目,然后一次删除一个,以避免在枚举时更改集合...
无论如何...当我单步执行代码时,似乎一切正常。在存在该方法之前,source 已删除正确数量的项目。但是,当我返回调用代码时,所有项目仍然存在于我原来的 IEnumerable 对象中。有什么建议吗?
提前致谢,
桑尼
【问题讨论】:
-
还有一件事... Contains 方法是我编写的另一种扩展方法(按预期工作)。
-
顺便说一句,不知道你是否知道,但 LINQ 确实有一个 Contains 方法:msdn.microsoft.com/en-us/library/bb357185.aspx
标签: c# .net lambda extension-methods ienumerable