IEnumerable 和 IEnumerator
2015-10-29 17:22
288 查看
IEnumerable 接口只包含一个抽象的方法 GetEnumerator(),它返回一个可用于循环访问集合的 IEnumerator 对象,IEnumerator 对象是一个集合访问器。
需要给自定义的类实现 foreach 功能,就需要实现 IEnumerable 接口,下面给出一个例子。
手工实现IEnumberable接口和IEnumerator接口中的方法实现的方式如下:
需要给自定义的类实现 foreach 功能,就需要实现 IEnumerable 接口,下面给出一个例子。
using System; using System.Collections; using System.Collections.Generic; class NewList<T> : IEnumerable //实现 IEnumerable 接口的 GetEnumerator() { private List<T> newList = new List<T>(); public void Add(T item) { newList.Add(item); } public IEnumerator GetEnumerator() { return this.newList.GetEnumerator(); } } class Program { static void Main(string[] args) { NewList<string> newList = new NewList<string>(); newList.Add("a"); newList.Add("b"); foreach(string item in newList) { Console.WriteLine("item:" + item); } } }
手工实现IEnumberable接口和IEnumerator接口中的方法实现的方式如下:
using System; using System.Collections; using System.Collections.Generic; class NewList<T> : IEnumerable //实现 IEnumerable 接口的 GetEnumerator() { private List<T> list = new List<T>(); public void Add(T item) { list.Add(item); } public IEnumerator GetEnumerator() { return new NewListEnumerator<T>(this); } private class NewListEnumerator<T>: IEnumerator { private int position = -1; private NewList<T> newList; public NewListEnumerator(NewList<T> newList) { this.newList = newList; } public object Current { get { return newList.list[position]; } } public bool MoveNext() { if(position < newList.list.Count - 1) { position++; return true; } else { return false; } } public void Reset() { position = -1; } } } class Program { static void Main(string[] args) { NewList<string> newList = new NewList<string>(); newList.Add("a"); newList.Add("b"); foreach(string item in newList) { Console.WriteLine("item:" + item); } } }
相关文章推荐
- uva 1614——UVA 1614 - Hell on the Markets
- 第9周项目2-对称矩阵压缩存储的实现与应用(1)
- eclipse中项目导入到android studio出现的Manifest merger failed问题
- Android 缓存-ASimplecache
- Centos7下yum安装mplayer和vlc播放器
- Android studio 导入github工程
- Cache friendly code
- xml被浏览器缓存了
- 图片预加载与图片懒加载
- nfc入门
- java lucene搜索功能初探(1)
- 升级xcode7的问题:使用shareSDK,坑的你两眼泪汪汪
- java设计模式之代理模式
- 1014 C语言文法定义与C程序的推导过程
- C语言文法阅读与理解序
- js中运算符的优先级
- -Android Studio导入Project的方法
- Python 基础——排列组合的实现
- 队列 数据结构作业(二)
- Effective C++笔记(二)