c#之Linq的原理讲解及封装自己的Linq
在博客园混了太久了,一直都是发一些软软的文章,做技术也要会点营销推广,工作艰辛,大家都懂的,是时候做出一点贡献了,写点有技术含量的文章,言归正传:
前段时间写了一篇文章<<c#之lamda表达式的前世今生>>介绍了lamda的演变来历,由于最近工作忙,今天才抽出点时间来准备写这篇文章,希望能让所有喜欢所有喜欢c#的小伙伴起来一定的启发和帮助,咱们废话不多话,直接上代码。
1、老规矩,定义Student类
2、定义一个集合listStudent
3、任务来了
前提:假设我们还没有学会linq。
领导说,写个方法能找出所有年龄大于20岁的学生集合,好,撸起袖子就写代码,如下:
然后直接调用方法
是不是很简单,完全没毛病。
然后过了一会,需求增加了,领导说:写个方法找出所有在北大上学的学生,Ok,继续撸代码:
然后直接调用方法
对于需求简单的,上面的写法完全没毛病。
但是过了一会,领导又提出诸多要求,分别如下:
1、找出所有年纪大于20岁的清华学生
2、找出所有年纪大于20岁的清华的男学生
3、找出所有年纪大于18岁小于20的清华的女学生
....
太多了,勤奋踏实的小伙伴们开始写新的方法了来满足领导要求,但是对于我来说,我就不干了,这样写什么时候是个头呀,我要另辟途径。
4、懒人们开始学linq了
领导需求太多了,懒人们一个一个写方法,肯定心里憋屈,然后就会去网上找解决方案,ok,找了linq。
上面领导的需求直接通过Linq写:
是不是瞬间感觉轻松了很多,以后有什么要求直接给来就行,一个Where扩展方法完全搞定,逻辑直接通过泛型委托来传递,委托中的方法体直接通过lamda(其实就是匿名函数的语法糖)来书写,代码量大大的减少。
5、封装自己的MyLinq
懒人学会了linq后,以后工作就快乐很多了,其中一部分喜欢折腾的就开始瞎折腾了:
linq那么方便,那么微软到底怎么封装的呢?
高手就是这样炼成的,重复造轮子是最好和最快的学习办法,ok,咱也封装一个自己的MyWhere。
这里需要用到几个知识点:扩展方法、泛型、委托,不了解的朋友请百度搜索,这里我再写篇幅就长了,下面直接封装代码:
扩展方法带两个参数,第一个参数为需要进行赛选的数据源,第二个参数为Func委托,带一个参数,返回bool值。
foreach中通过Invoke方法调用委托来判断是否满足条件,满足条件则加入到我们的结果集合中。
这样我们就可以使用自己封装的委托了。
写到这里,大家应该能明白linq的原理了吧,希望对喜欢c#开发的小伙伴们起到一定的帮助和提高。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步