日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#中LINQ与数据管道

發(fā)布時間:2023/12/4 C# 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#中LINQ与数据管道 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

假如有一個集合,里面有數(shù)字1-10,現(xiàn)在想實現(xiàn)從這10個數(shù)字中取出偶數(shù)數(shù)字,然后將得到的偶數(shù)乘以10,最后輸出前三個。代碼如下:

代碼非常的簡單,最后會得到20、40、60這三個數(shù)字,但結果并不是我們今天最關注的事。今天我們想討論下numbers中的數(shù)字是如何Where、Select、Take這三個方法中流轉(zhuǎn)的。也許你會認為,是這樣流轉(zhuǎn)的。如下:

一般我們會向上圖這樣理解:Where中生成并返回符合條件的新數(shù)組,然后將這個數(shù)組交個Select處理,Select中生成并返回新數(shù)組,再交由Take處理,Take取出前三個數(shù)并返回新數(shù)組。

其實并不是這樣,我們知道Linq是由一系列基于IEnumerable的擴展方法組成,返回值也都是IEnumerable,而IEnumerable只是一個迭代器對象,每次讀取IEnumerable對象時,其實只是遍歷里面的一個元素。上面方法的真正流程應該是流式的類似管道的操作,即讀一個數(shù)字處理一個,邊讀邊處理。如下:

這樣數(shù)據(jù)逐個在方法中處理就構成了數(shù)據(jù)管道,這里還有一個地方需要注意,很多Linq方法是延遲操作,比如我們例子中的Where、Select、Take這些,但ToList、Count、Sum會立即執(zhí)行。延遲操作就是只是定義如何操作數(shù)據(jù),但不會真正執(zhí)行,等到數(shù)據(jù)真正使用的時候才會執(zhí)行。我們來驗證下,比如我在Select中故意拋一個異常,試下。代碼如下:

我們再次執(zhí)行一下,異常不會報出。代碼如下:

其實代碼中的filter變量可以理解成一堆算法的包裝器,只是封裝了一系列對數(shù)據(jù)的操作,但只有元素被使用時才會執(zhí)行。我們在代碼后加一段遍歷filter并輸出的代碼,這時元素被使用到了,就會報錯了。代碼如下:

好了,我們要講的內(nèi)容就講完了,內(nèi)容非常淺,相信很多人都是知道的,大家可以去看下Linq的源碼,相信收獲會更多。管道的思想其實應用非常多,比如鏈式編程、建造者模式,在dotcore中用的就更多了。

高冷地說聲拜拜~~

總結

以上是生活随笔為你收集整理的C#中LINQ与数据管道的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。