c# – 是否可以在EntityCollection上实现RemoveAll()?
发布时间:2020-12-16 01:53:13 所属栏目:百科 来源:网络整理
导读:我有一个类似于 this one的问题,但与EntityCollection有关. EntityCollection实现了Remove(),允许您一次从列表中删除单个项目.但是,我想实现一次可以删除多个项目的扩展方法,类似于IList T的RemoveAll(Predicate T匹配)方法. 一个想法是循环遍历列表,并删除
我有一个类似于
this one的问题,但与EntityCollection<>有关.
EntityCollection实现了Remove(),允许您一次从列表中删除单个项目.但是,我想实现一次可以删除多个项目的扩展方法,类似于IList< T>的RemoveAll(Predicate< T>匹配)方法. 一个想法是循环遍历列表,并删除项目.就像是: public static void RemoveAll<T>(this EntityCollection<T> collection,Predicate<T> match) where T : EntityObject { foreach (T o in collection) { if (match(o)) collection.Remove(o); } } 但是,这将抛出异常,因为您无法修改正在迭代的集合. 另一个想法是构建要删除的项目的临时列表,然后遍历该列表并从集合中删除每个项目.但是,这对我来说似乎效率低下.有更好的实施吗? 解决方法
正如我在评论中所说,迭代二级列表可能是这里唯一安全的选择.
您可以使用以下内容实现它: public static void RemoveAll<T>(this EntityCollection<T> collection,Predicate<T> match) where T : EntityObject { if (match == null) { throw new ArgumentNullException("match"); } collection.Where(entity => match(entity)) .ToList().ForEach(entity => collection.Remove(entity)); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容