IEnumerator 是一个用于迭代集合对象(如列表和数组)的接口。它提供了用于访问对象集合的元素的方法。
IEnumerable和IEnumerator接口搭配使用:
在遍历Student对象时通过Student类中GetEnumerator方法,对StudentEnumerator类进行实例,并触发遍历。
// 第一步:实现IEnumerable接口
class Student:System.Collections.IEnumerable
{
public int Id { get; set; }
public IEnumerator GetEnumerator()
{
string[] student = { "学生1" , "学生2", "学生3"};
return new StudentEnumerator(student); // 实例StudentEnumerator类,并通过构造向类中数组赋值
}
}
// 第二步: 实现 IEnumerator接口
internal class StudentEnumerator : IEnumerator
{
private string[] _student;
int _position = -1;
public StudentEnumerator(string[] student)
{
this._student = student;
}
public object Current // 获取集合中位于当前枚举的元素
{
get
{
if (_position == -1 || _position >= _student.Length)
{
throw new InvalidOperationException();
}
return _student[_position];
}
}
public bool MoveNext() // 把操作推进到下一个
{
if ( _position < _student.Length-1)
{
_position++;
return true;
}
return false;
}
public void Reset() // 将枚举数设为初始数据
{
_position = -1;
}
}
// 第三步: 使用
public class IEnumerableShow
{
public void Show()
{
int[] array = { 1, 2, 3, 4, 5, };
Student student = new Student() { Id = 1 };
foreach (var item in student)
{
Console.WriteLine(item);
}
}
}