加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读