C#中foreach语句的迭代器实现机制
作者:互联网
原文链接:http://www.cnblogs.com/riasky/p/3481600.html
C#中的foreach语句可用于循环遍历某个集合中的元素,而所有的只要支持了IEnumerable或IEnumerable<T>泛型接口的类型都是可以
用foreach遍历的。其具体的遍历实现过程就是利用C#中的迭代器中的方法来按照特定顺序遍历的。在.NET中IEnumerator和IEnumerator<T>
就是对迭代器的抽象,如果要自定义的类型也支持foreach循环则首先须要声明该类支持IEnumerable或IEnumerable<T>接口,然后再去实现自己
的支持了IEnumerator<T>的迭代器类型;唉,先看代码吧!
---------YYC
For Example:
// 实现了IEnumerable<T>泛型接口的类
using System; using System.Collections.Generic; using System.Collections; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Pra6 { public enum PhoneType { 家庭电话,办公电话,手机,小灵通,传真 } class Phones : IEnumerable<string> { private string[] phones; private int count = 0; public int Count { get { return count; } } public string this[PhoneType type] { get { return phones[(int)type]; } set { int index = (int)type; if (phones[index] == null && value != null) { count++; } else if (phones[index] != null && value == null) { count--; } phones[index] = value; } } public Phones() { phones = new string[5]; } public void CopyTo( Array array,int index) { foreach(string s in phones ) { if (s != null) array.SetValue(s,index++); } } public IEnumerator<string > GetEnumerator()//返回迭代器 { return new MyEnumerator<string>(phones); } IEnumerator IEnumerable.GetEnumerator()//返回迭代器,由于IEnumerable<T>接口也继承了IEnumerable接口所以出于兼容性考虑,最后也要实现该方法,但内容可//以和上面的代码一样 { return this.GetEnumerator(); } } }
标签:index,迭代,C#,phones,IEnumerable,System,foreach,using,public 来源: https://blog.csdn.net/weixin_30650039/article/details/96741525