你的位置:首页 > 软件开发 > ASP.net > 为IEnumerableT添加RemoveAllIEnumerableT扩展方法

为IEnumerableT添加RemoveAllIEnumerableT扩展方法

发布时间:2016-10-13 18:00:04
最近写代码,遇到一个问题,微软基于List<T>自带的方法是public bool Remove(T item);,可是有时候我们可能会用到诸如RemoveAll<IEnumerable<T>>的方法,坦白的说,就是传入的参数是一个IEnume ...

最近写代码,遇到一个问题,微软基于List<T>自带的方法是public bool Remove(T item);,可是有时候我们可能会用到诸如RemoveAll<IEnumerable<T>>的方法,坦白的说,就是传入的参数是一个IEnumerable<T>,而不是一个T,这种情景是随时可能用到的。当然我们会轻易的发现List<T>里本身就封装了一个方法public int RemoveAll(Predicate<T> match),但是后面我们的测试性能上来说,真不敢恭维。被逼无耐,只能想办法封装一个IEnumerable<T>扩展方法。可是此时不要忘了宗旨,封装的目的,就是‘性能’必须要好!

下面我们一步一步讲讲我遇到的经历分享给大家。

假设如下的数据:

1.Source IEnumerable Items:A  B  C  D  A  E  F  G  H

2.Remove IEnumerable Items:A  B  C  D  A  E

3.Result IEnumerable Items:F  G  H

第1行是原有的IEnumerable数据

第2行是要删除(remove)的数据

第3行是最终删除结果的数据

从上面数据,我们分析下如何高效的得到第3行数据呢?记得,一定要‘高效’,失去高效的方法,我认为不是本节讨论的内容,因为没有任何意义,当然,高效是相对的,不是说,今天讲的方法是最高效的,起码很高效,恩~ 请不要骂我,确实是费话!

 

没错,很多程序员想必和我一样,大多数会这样做

为IEnumerableT添加RemoveAllIEnumerableT扩展方法为IEnumerableT添加RemoveAllIEnumerableT扩展方法
 for (int index = 0; index < source.Count; index++)      {        var item = source.ElementAt(i);        if (remove.Contains(item))        {          source.Remove(item);        }      }

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:为IEnumerableT添加RemoveAllIEnumerableT扩展方法

关键词:ie

ie
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。