IEnumerator接口

时间:2024-12-21 19:43:49

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);
        }
    }
}