總結一下 IEnumerable 的例子

2022-01-10 00:16:24 字數 1899 閱讀 8222

本篇將圍繞 《試試 ienumerable 的 10 個小例子》和《試試 ienumerable 的另外 6 個小例子》給出的例子,總結一下對於ienumerable介面的一些使用方法,希望讀者能夠從中獲得一些啟發。

這種遍歷通常分為兩種目的:遍歷和查詢。

ienumerable及其泛型版本ienumerable定義了乙個型別的 「可迭代性」。這點很容易理解,系統中的很多集合型別都實現了該介面。

因此這些集合型別均可以採用foreach進行迭代遍歷。但是每個集合型別的迭代方式和結果是不完全相同的,這取決於集合本身的特性。例如:

所以,即使都是丟進foreach,但是效果也是不完全一樣的。使用這些,需要讀者對這些型別本身需要增進了解。

建議讀者在使用框架中實現了ienumerable的型別時,一定要注意迭代的細節,可以通過 msdn 上的文件了解其特殊性。

linq 是乙個說小不小的話題,這裡只是說其中的 linq to object 部分內容。

通過 linq 中提供的一些擴充套件方法,可以方便的控制對於乙個ienumerable物件的迭代方式。通過這些方法的應用,可以在很多時候避免複雜的條件和迴圈巢狀。

同時,linq 中抽象的 func 和 action,也要求開發人員在平時的編寫過程中注意對於迭代本身的歸類和整理。where(isleapyear)會比where(x=>(x % 4 == 0 && x % 100 != 0) || x % 400 == 0)來的更加容易閱讀。

除了基礎的資料結構,開發過程中有時需要自定義一些集合型別。這些集合型別需要自己實現乙個迭代過程。例如:二叉樹及其遍歷,對列表進行分頁等等。

這些資料結構的迭代通常需要特定演算法的支援。

在《試試 ienumerable 的另外 6 個小例子》中關於樹的幾個例子便資料此類中。

在 c#7.0 引入了本地函式之後,ienumerable結合本地函式,快速實現自定義迭代過程的奇怪操作也就跟著出現。

通過這種操作可以在乙個函式內採用一些以前不容易實現的方式實現一些操作:

這相關的例子在《試試 ienumerable 的 10 個小例子》中較多。

按照月老闆的名言:「業務複雜度是不會因為系統設計變化而減少的,它只是從乙個地方轉移到了另外的地方。」,我們可以知道,這種寫法其實沒有使得原來就有的判斷和迴圈變少。只是改變了語法結構。

讀者可以將這種操作作為一種 「語法糖」 進行使用。如果是在團隊專案中,則需要尊重團隊成員的共同意見,因為這種操作並非所有人都願意接受。

當然,這種做法在一些地方會產生好處。例如在將本地函式、ienumerable 和 task 相結合的 t10 測試網路連線 中。這種寫法就減少了傳統寫法中需要建立乙個list或者array的開銷。

總之,這種寫法,提供了一種新的思路。是否一定要使用,將取決於讀者團隊的接受程度。

在 c# 8 和 .netcore 3.0 到來的版本中,我們迎接到了iasyncenumerable介面來實現非同步迭代器的功能。

ienumerable是同步方法的迭代器,iasyncenumerable可以看做是其非同步版本。有了這個介面,那麼在迭代的過程中也可以充分利用 async/await 帶來的程式設計快感。

本系列中沒有新增這部分的示例,但是主體思路是一致的。

她的出現,只會使得開發者更容易應用以上總結的幾種主要場景。

本系列到此便結束了,希望讀者多在實踐中體會以上總結的幾種使用場景。

本系列中的例子已經全部使用 dotnetfiddle.net 進行了重寫,讀者可以直接在本部落格的頁面上執行這些示例。

稍微總結一下

其實整個程式16日的時候應該已經搞得差不多,文件也已經比較詳細。但是由於這個禮拜又是筆試又是面試,所以都沒有時間review整個程式。今天看了一下,改了一些輸出檔案的位置,基本上完成了所有任務了。程式放在 http xiao 81 svn auto testing 下。其中包括三個可執行指令碼 1....

總結一下模板

二叉樹的各種操作 include include include includetypedef struct node tree void createbitree tree p 建樹 return void xpreorder tree p 輸出先序 void zpreorder tree p 輸...

隨便總結一下

資訊和人是主體也是核心。兩者需要進行測算。資訊是由頭,體,鍵,三部分構成。所謂頭,是題目,簡介,id,等,也就是乙個代表或者叫名,總之就是這樣類似的乙個東西。我不能把這種東西說的真正明白,因為其完全是代表性的,而代表性的不是自身,所以不能明確。體,是資訊的核心內容。這個不需要過多解釋。乙個人,不如說...