在博客園混了太久了,一直都是發一些軟軟的文章,做技術也要會點營銷推廣,工作艱辛,大家都懂的,是時候做出一點貢獻了,寫點有技術含量的文章,言歸正傳:
前段時間寫了一篇文章<<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#開發的小伙伴們起到一定的幫助和提高。
