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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Iterator迭代器原理

發布時間:2024/9/30 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Iterator迭代器原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

引入

?

foreach (var item in hand)

{遍歷

???item.Fly();

}

?

常見面試題:可以foreach的條件

對象具有迭代器對象(GetEnumerator方法)

或,對象實現IEnumerable接口

?

?

迭代器原理與意圖

?

原理:iterator 迭代器對象

意圖:訪問聚合對象內容而不暴露其內部結構。

????? 提供簡單明了的獲取集合類型對象的方式。

?

?

?

?

?

?

?

?

?

?

?

?

迭代器實現

?

調用實現

?

IEnumerator iterator=hand.GetEnumerator();//創建迭代器對象

?

//理解為:索引增加? 如果返回true表示有元素

while(iterator.MoveNext())// -1??? //2.移動到下一個元素

{ //理解為:獲取當前索引的元素

IThrowablet = iterator.Current as IThrowable;獲取當前元素

t.Fly();

}

?

?

迭代器01

?

1.創建迭代器對象

public IEnumerator GetEnumerator()

{//創建迭代器對象

return new HandEnumerator() {Target = AllObject };

}

?

?

?

?

?

2.自定義迭代器對象

??? //自定義迭代器對象:負責提供一種順序訪問集合類型對象元素的方法。

??? public class HandEnumerator:IEnumerator

??? {?? public IThrowable[] Target{ get; set; }

??????? private int index = -1;

??????? public object Current

??????? { get???????????? {

?????????????? return Target[index];??????????? }??????? }

??????? public bool MoveNext()

??????? {

??????????? //索引增加

??????????? index++;

??????????? //true 沒有越界?????? false 越界

??????????? return index <=Target.Length - 1;

??????? }

??????? public void Reset()

??????? {???index = -1;??????? }

??? }

?

?

?

?

?

?

?

?

迭代器02

1.利用yeld return 來實現

public IEnumerator GetEnumerator()

{

//1.第一次調用MoveNext方法開始執行方法體

//2.執行到yieldreturn處,暫時退出

//3.再次調用MoveNext方法,從yield return處繼續執行。

//循環到2步……

//yieldreturn 將自動創建迭代器對象

for (int i = 0; i <AllObject.Length; i++)

??????????? {

??????????????? yield return AllObject[i];//暫時退出

??????????? }

??????? }

?

?

?

?

總結

以上是生活随笔為你收集整理的Iterator迭代器原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。