//IEnumerable 与 IEnumerator
//1.公开枚举数,支持在非凡性集合上进行简单迭代,枚举器;
//2.只有一个抽象方法:GetEnumerator();
//3.IEnumerator 迭代器,实现访问集合的功能;
//4.IEnumerator只有一个属性,两个方法MoveNext和Reset;
//5.MoveNext与foreach实现循环的时候MoveNext不太安全;
//需注意:在迭代的过程中,不能修改迭代集合,否则不安全;
//定义一个类实现IEnumerable遍历
public class Per : IEnumerable
{
private string[] names = new string[] { "A", "B", "C" };
public IEnumerator GetEnumerator()
{
//调用构造函数,将数组传递过来
return new Person(names);
}
}
//写一个类继承IEnumerator
public class Person : IEnumerator
{
//定义数组
private string[] _name;
//遍历时候的索引
private int index = -1;
//构造函数
public Person(string[] tem)
{
_name = tem;
}
//返回当前索引指向的names数组中的元素
public object Current
{
get { return _name[index]; }
}
//判断索引是否完成
public bool MoveNext()
{
index++;
if (index < _name.Length)
{
return true;
}
else
{
return false;
}
}
//重置索引,便于以后遍历
public void Reset()
{
index = -1;
}
}
Per p1 = new Per();
//循环输出
foreach (string item in p1)
{
Console.WriteLine(item);
}
结果: