Головна‎ > ‎C#‎ > ‎Додатково‎ > ‎

IEnumerable

Для того аби пройтися по об'єктах колекції в циклі foreach вони мають підтримувати інтерфейси IEnumerable та IEnumerator

foreach (var item in kolektsiya)
{

}



public interface IEnumerable
{
     IEnumerator GetEnumerator();     // повертає посилання на інший інтерфійс
}


public interface IEnumerator
{
     bool MoveNext();           // вперед на один елемент
     object Current {get;}    // поточний елемент
     void Reset();               // на початок
}





class WeekEnumerator : IEnumerator
{
    string[] days;
    int position = -1;
    public WeekEnumerator(string[] days)
    {
        this.days = days;
    }
    public object Current
    {
        get
        {
            if (position == -1 || position >= days.Length)
                throw new InvalidOperationException();
                return days[position];
        }
    }

    public bool MoveNext()
    {
        if(position < days.Length - 1)
        {
            position++;
            return true;
        }
        else
            return false;
    }

    public void Reset()
    {
        position = -1;
    }
}


class Week
{
    string[] days = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" };

    public IEnumerator GetEnumerator()
    {
        return new WeekEnumerator(days);
    }
}


class Program
{
    static void Main(string[] args)
    {
        Week week = new Week();
        foreach (var day in week)
        {
            Console.WriteLine(day);
        }
        Console.Read();
    }
}