快捷搜索:  汽车  科技

linq模板入门教程(之Linq的原理讲解及封装自己的Linq)

linq模板入门教程(之Linq的原理讲解及封装自己的Linq)然后过了一会,需求增加了,领导说:写个方法找出所有在北大上学的学生,Ok,继续撸代码:是不是很简单,完全没毛病。领导说,写个方法能找出所有年龄大于20岁的学生集合,好,撸起袖子就写代码,如下:然后直接使用

前段时间写了一篇文章<<c#之lamda表达式的前世今生>>介绍了lamda的演变来历,由于最近工作忙,今天才抽出点时间来准备写这篇文章,希望能让所有喜欢所有喜欢c#的小伙伴起来一定的启发和帮助,咱们废话不多话,直接上代码。

这里要吐槽一下头条,写编程文章真心dan疼(头条的代码要截图保存,否则会莫名其妙丢失)

1、老规矩,定于Student类

linq模板入门教程(之Linq的原理讲解及封装自己的Linq)(1)

2、定义一个集合listStudent


linq模板入门教程(之Linq的原理讲解及封装自己的Linq)(2)

3、任务来了

前提:假设我们还没有学会linq。

领导说,写个方法能找出所有年龄大于20岁的学生集合,好,撸起袖子就写代码,如下:


linq模板入门教程(之Linq的原理讲解及封装自己的Linq)(3)

然后直接使用

linq模板入门教程(之Linq的原理讲解及封装自己的Linq)(4)

是不是很简单,完全没毛病。

然后过了一会,需求增加了,领导说:写个方法找出所有在北大上学的学生,Ok,继续撸代码:


linq模板入门教程(之Linq的原理讲解及封装自己的Linq)(5)

然后直接使用

linq模板入门教程(之Linq的原理讲解及封装自己的Linq)(6)

过了一会,领导又提出诸多要求,分别如下:

1、找出所有年纪大于20岁的清华学生

2、找出所有年纪大于20岁的清华的男学生

3、找出所有年纪大于18岁小于20的清华的女学生

....

太多了,有些朋友估计勤奋踏实,老老实实的继续加方法,撸代码。

4、我要学linq了

领导需求太多了,让我一个一个写,肯定心里憋屈,有些上进的朋友就会去网上找解决方案,ok,找了linq。

上面领导的需求直接通过Linq写:

linq模板入门教程(之Linq的原理讲解及封装自己的Linq)(7)

是不是瞬间感觉轻松了很多,以后有什么要求直接给来就行,一个Where扩展方法完全搞定,逻辑直接通过泛型委托来传递,委托中的方法体直接通过lamda(其实就是匿名函数的语法糖)来书写,代码量大大的减少。

5、封装自己的MyLinq

linq那么方便,那么微软到底怎么封装的呢?作为一个有追求的开发人员,重复造轮子是最好的学习办法,ok,咱也封装一个主机的MyWhere。

这里需要用到几个知识点:扩展方法、泛型、委托,不了解的朋友请百度搜索,这里我再写篇幅就长了,下面直接封装代码:


linq模板入门教程(之Linq的原理讲解及封装自己的Linq)(8)


扩展方法带两个参数,第一个参数为需要进行赛选的数据源,第二个参数为Func委托,带一个参数,返回bool值。

foreach中通过Invoke方法调用委托来判断是否满足条件,满足条件则加入到我们的结果集合中。

这样我们就可以使用自己封装的委托了。


linq模板入门教程(之Linq的原理讲解及封装自己的Linq)(9)

写到这里,大家应该能明白linq的原理了吧,希望对喜欢c#开发的小伙伴们起到一定的帮助和提高。


linq模板入门教程(之Linq的原理讲解及封装自己的Linq)(10)


猜您喜欢: