參考MSDN學習《迭代器》

2021-09-09 02:57:59 字數 1579 閱讀 8087

迭代器是一種方法、get 訪問器或運算子,它通過使用yield關鍵字對陣列或集合類執行自定義迭代。yield 返回語句會導致源序列中的元素在訪問源序列中的下乙個元素之前立即返回給呼叫方。儘管您以方法的形式編寫迭代器,但編譯器會將其轉換為乙個實際上是狀態機的巢狀類。只要客戶端**中的 foreach 迴圈繼續進行,此類就會跟蹤迭代器的位置。

將使用 foreach 語句從客戶端**中呼叫迭代器。在為類或結構建立迭代器時,您不必實現整個 ienumerator 介面。當編譯器檢測到迭代器時,它將自動生成 ienumerator 或 ienumerator<(of <(t>)>) 介面的 current、movenext 和 dispose 方法。

迭代器是可以返回相同型別的值的有序序列的一段**

迭代器可用作方法、運算子或 get 訪問器的**體。

迭代器**使用 yield return 語句依次返回每個元素。yield break 將終止迭代。

可以在類中實現多個迭代器。每個迭代器都必須像任何類成員一樣有唯一的名稱,並且可以在 foreach 語句中被客戶端**呼叫,如下所示:foreach(int x in sampleclass.iterator2){}。迭代器的返回型別必須為 ienumerable、ienumerator、ienumerable<(of <(t>)>) 或 ienumerator<(of <(t>)>)。

迭代器是 linq 查詢中延遲執行行為的基礎。

yield 關鍵字用於指定返回的乙個或多個值。到達 yield return 語句時,會儲存當前位置。下次呼叫迭代器時將從此位置重新開始執行。

迭代器對集合類特別有用,它提供一種簡單的方法來迭代複雜的資料結構(如二進位制樹)。

下面舉兩個自定義集合類中,迭代器的使用,可以大大減少**的使用量。

using

system;

using

system.collections;

namespace

yield

;public

ienumerator

getenumerator()}}

class

test

console

.readkey();}}

}重新使用迭代器實現前面的自定義的library(集合)類

using

system.collections;

using

system;

namespace

library

public

void

remove(

string

book)

public

void

add(

string

book)

public

ienumerator

getenumerator()

foreach (

string

book

inbooks)

}}class

test

console

.readkey();

}}}

迭代器學習

1 乙個函式中需要有乙個 yield 語句即可將其轉換為乙個生成器 2 乙個生成器函式主要特徵是它只會回應在迭代中使用到的 next 操作。一旦生成器 函式返回退出,迭代終止。我們在迭代中通常使用的 for 語句會自動處理這些細節,所 以你無需擔心。3 迭代器是不可逆的 4 itertools 模 ...

迭代器學習筆記

本文是學習 stl原始碼剖析 時的學習筆記。迭代器是一種類,其包裝了原生指標,並過載了operator operator operator operator 等等,因此其行為類似指標。容器為了儲存各種型別的元素,定義為類模板。與此相似,為了使迭代器能夠指向不同型別的容器元素,迭代器也需要定義為類模板...

Python學習 迭代器

含義迭代的意思類似於迴圈,每一次重複的過程被稱為一次迭代的過程,而每一次迭代得到的結果會被用來作為下一次迭代的初始值 提供迭代方法的容器稱為迭代器,常用的迭代器 列表 元組 字串 字典。示例 1 字串 字串就是乙個容器,同時也是乙個迭代器,for 語句的作用就是觸發這個迭代器的迭代功能,每次從容器裡...