亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C# IEnumerable和IEnumerator接口淺析

2019-10-29 21:13:12
字體:
來源:轉載
供稿:網友

溫故而知新,可以為師矣,有空經常復習一下基礎知識是有必要的,并且能加深理解和記憶。

Foreach常用于循環訪問集合,對實現IEnumerable的接口的容器進行遍歷,IEnumerable和IEnumerator接口我有時候也有點迷糊,按官方的解釋,IEnumerable是枚舉器接口,IEnumerator是迭代器接口,從字面意思來看相差不大,逐一分析一下。

IEnumerable接口

public interface IEnumerable{  IEnumerator GetEnumerator();}

繼承IEnumerable接口的類需實現暴露出來的GetEnumerator()方法,并返回一個IEnumerator接口對象,看來真正做事的是IEnumerator,F12看一下IEnumerator又有什么鬼東西。

IEnumerator接口

public interface IEnumerator{  object Current { get; } bool MoveNext();  void Reset();}

IEnumerator接口有三個東東,一個屬性Current,返回當前集合中的元素,方法MoveNext()移動到下一個,遍歷不都是向后遍歷的嘛,Reset(),字面意思重置,這個容易理解。做個假設:既然IEnumerable接口返回是IEnumerator接口迭代器來實現的,那么僅繼承IEnumerator迭代器接口能不能實現一個自定義容器?

定義一個Phone類

public class Phone { public string Name; public Phone(string name) {  this.Name = name; }}

定義一個名為MyEnumerator迭代器,并現實它接口IEnumerator

public class MyEnumerator : IEnumerator{ Phone[] p; int idx = -1; public MyEnumerator(Phone[] t) {  p = t; } public object Current {  get  {  if (idx == -1)   return new IndexOutOfRangeException();  return p[idx];  } } public bool MoveNext() {  idx++;  return p.Length > idx; } public void Reset() {  idx = -1; }}
class Program { static void Main(string[] args) {       show("-----------IEnumerator------------");  Phone[] phones = new Phone[] { new Phone("iPhone 7s"), new Phone("iPhone 6s"), new Phone("iPhone 5s") };  MyEnumerator enumerator = new MyEnumerator(phones);  while (enumerator.MoveNext())  {  Phone p = enumerator.Current as Phone;  show(p.Name);  }  Console.ReadKey(); } static void show(string i) {  Console.WriteLine(i); } }

結果顯示:

ienumerable,ienumerator,C#,接口

果然不出所料,真正做事情的是IEnumerator接口,即可循環訪問自定義的一個容器,不過,初衷是想用Foreach來做循環訪問、遍歷的。那好,那就只能顯示IEnumerable接口來做。稍稍改造一下Phone類:

public class Phone : IEnumerable { public string Name ; public Phone(string name) {  this.Name = name; } Phone[] p; public Phone(Phone[] t) {  p = t; } public IEnumerator GetEnumerator() {  return new MyEnumerator(p); } }
static void Main(string[] args) {  show("-----------IEnumerator------------");  Phone[] phones = new Phone[] { new Phone("iPhone 7s"), new Phone("iPhone 6s"), new Phone("iPhone 5s") };  MyEnumerator enumerator = new MyEnumerator(phones);  while (enumerator.MoveNext())  {  Phone p = enumerator.Current as Phone;  show(p.Name);  }  show("-----------IEnumerable------------");  Phone phoneList = new Phone(phones);  foreach (Phone p in phoneList)  {  show(p.Name);  }  Console.ReadKey(); }

結果顯示:

ienumerable,ienumerator,C#,接口

大功告成,再擴展成通用的容器PhonePackage,繼承泛型IEnumerable<T>接口即可。

public class PhonePackage<T> : IEnumerable<T>  { private List<T> dataList = null; public void Add(T t) {  if (dataList == null)  dataList = new List<T>();  dataList.Add(t); } public IEnumerator<T> GetEnumerator() {  foreach (T t in dataList)  {  yield return t;  } } IEnumerator IEnumerable.GetEnumerator() {  foreach (T t in dataList)  {  yield return t;  } } }
static void Main(string[] args) {  show("-----------IEnumerator------------");  Phone[] phones = new Phone[] { new Phone("iPhone 7s"), new Phone("iPhone 6s"), new Phone("iPhone 5s") };  MyEnumerator enumerator = new MyEnumerator(phones);  while (enumerator.MoveNext())  {  Phone p = enumerator.Current as Phone;  show(p.Name);  }  show("-----------IEnumerable------------");  Phone phoneList = new Phone(phones);  foreach (Phone p in phoneList)  {  show(p.Name);  }  show("-----------IEnumerable<T>------------");  PhonePackage<Phone> phonePackage = new PhonePackage<Phone>();  phonePackage.Add(new Phone("iPhone 7s"));  phonePackage.Add(new Phone("iPhone 6s"));  phonePackage.Add(new Phone("iPhone 5s"));  foreach (Phone p in phonePackage)  {  show(p.Name);  }  Console.ReadKey(); } static void show(string i) {  Console.WriteLine(i); }

結果顯示:

ienumerable,ienumerator,C#,接口

IEnumerator迭代器接口挺啰嗦的,yield是簡化了遍歷的語法糖而已。

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持VEVB武林網!


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩免费在线播放| 国产亚洲精品91在线| 亚洲小视频在线| 国产精品久久久久久久久男| 欧美一级视频一区二区| 日本久久久久久久久久久| 精品视频久久久久久| 久久久噜噜噜久噜久久| 国产日韩在线亚洲字幕中文| 亚洲女人被黑人巨大进入| 亚洲欧美日韩精品久久亚洲区| 亚洲欧洲免费视频| 视频直播国产精品| 欧美激情第一页xxx| 992tv在线成人免费观看| 精品视频久久久久久久| 欧美自拍大量在线观看| 久久免费视频在线观看| 日韩电影网在线| 国产一区二区日韩精品欧美精品| 国产精品久久久久久av福利软件| 最近更新的2019中文字幕| 国内精品免费午夜毛片| 欧美精品做受xxx性少妇| 懂色aⅴ精品一区二区三区蜜月| 色噜噜国产精品视频一区二区| 精品日韩中文字幕| 国产亚洲a∨片在线观看| 欧美xxxx做受欧美.88| 久久影院中文字幕| 夜夜嗨av色一区二区不卡| 91av免费观看91av精品在线| 久久精品久久久久| 黄色一区二区在线| 欧美精品久久久久久久| 亚洲图片欧美日产| 久久精品99久久久久久久久| 日韩视频永久免费观看| 久久99精品国产99久久6尤物| 精品久久久av| 成人免费观看49www在线观看| 亚洲成人激情在线| 国产日韩综合一区二区性色av| 欧美大肥婆大肥bbbbb| 高清欧美性猛交xxxx| 中文字幕久热精品视频在线| 国产精品久久久久久亚洲调教| 国产日韩欧美另类| 欧美性极品少妇精品网站| 狠狠躁18三区二区一区| 亚洲区中文字幕| 欧美日韩在线另类| 国产91精品不卡视频| 中文字幕在线日韩| 性欧美激情精品| 136fldh精品导航福利| 91av中文字幕| 日韩av在线播放资源| 日韩中文在线中文网三级| 精品国内产的精品视频在线观看| 欧美一级大胆视频| 在线观看国产精品日韩av| 精品久久久久久中文字幕| 国产极品jizzhd欧美| 欧美一级在线播放| 日韩大陆欧美高清视频区| 国产在线视频一区| 国产91九色视频| 亚洲一区二区免费在线| 亚洲精品日产aⅴ| 久久免费少妇高潮久久精品99| 另类图片亚洲另类| 色噜噜狠狠狠综合曰曰曰| 国产精品香蕉国产| 精品国产自在精品国产浪潮| 欧美大片欧美激情性色a∨久久| 国产精选久久久久久| 久久亚洲精品小早川怜子66| 91免费综合在线| 中文字幕视频在线免费欧美日韩综合在线看| 欧美激情xxxx性bbbb| 在线一区二区日韩| 中文字幕视频一区二区在线有码| 国产精品看片资源| 日本一区二三区好的精华液| 国产精品女人网站| 久久免费视频观看| 中文字幕不卡在线视频极品| 欧美日韩亚洲天堂| 亚洲国产99精品国自产| 国产精品久久婷婷六月丁香| 国产日韩精品视频| 久久久久亚洲精品成人网小说| 久久99国产精品久久久久久久久| 精品福利视频导航| 亚洲高清免费观看高清完整版| 亚洲国产99精品国自产| 亚洲精品小视频在线观看| 国产精品入口福利| 57pao国产成人免费| 精品视频中文字幕| 亚洲国产精品久久| 国产小视频国产精品| 亚洲xxxx3d| 久久久久久久久网站| 亚洲国产精品99久久| 高清一区二区三区日本久| 日韩经典中文字幕在线观看| 欧美成人激情视频| 日韩av在线免播放器| 欧美刺激性大交免费视频| 一本大道久久加勒比香蕉| 黑人巨大精品欧美一区免费视频| 亚洲国产精久久久久久| 成人午夜两性视频| 97视频免费看| 欧美一级片一区| 另类美女黄大片| 国产专区精品视频| 91精品久久久久久综合乱菊| 精品小视频在线| 欧美孕妇性xx| 91在线网站视频| 中文字幕亚洲综合久久筱田步美| 精品久久久久人成| 欧美裸体视频网站| 国产欧美欧洲在线观看| 一区二区成人精品| 国产中文日韩欧美| 最近的2019中文字幕免费一页| 92看片淫黄大片欧美看国产片| 中文字幕日韩免费视频| 性亚洲最疯狂xxxx高清| 久久免费视频网| 久久久久久国产精品美女| 成人黄色生活片| 色偷偷综合社区| 国产精品久久久久久久久男| 超碰91人人草人人干| 亚洲自拍小视频免费观看| 亚洲国产小视频在线观看| 欧美性理论片在线观看片免费| 国产视频一区在线| 91在线视频导航| 91精品国产91久久久久久不卡| 国产精品1区2区在线观看| 久久青草福利网站| 国产精品老牛影院在线观看| 久久久在线观看| 亚洲一区中文字幕| 成人免费xxxxx在线观看| 成人美女免费网站视频| 色婷婷av一区二区三区久久| 国产成人自拍视频在线观看| 国产成人亚洲综合| 高跟丝袜一区二区三区| 亚洲欧美综合区自拍另类| 国产欧美日韩91| 欧美激情精品久久久久久久变态| 日韩欧亚中文在线| 亚洲国产高清自拍| 国产免费亚洲高清| 久久夜色精品亚洲噜噜国产mv| 欧美日韩在线视频一区二区|