Пишем свою реализация интерфейсов IEnumerable и IEnumerator для перебора элементов в foreach.
Пример
C#
Создаем новое C# консольное приложение... и напишем код
using System;
using System.Collections;
namespace ConsoleApplication1
{
// MyEnumerator
class MyEnumerator : IEnumerator
{
// поля
protected int Length = 0;
protected int Index = 0;
protected int[] Values = null;
// методы
public void AddValues(int[] values)
{
// allocate memory
Length = values.Length;
Values = new int[Length];
// add values
for (int i = 0; i < values.Length; i++)
Values[i] = values[i];
}
public object Current
{
get { return Values[Index]; }
}
public bool MoveNext()
{
Index++;
return Index < Length;
}
public void Reset()
{
Index = 0;
}
}
// MyEnumerable
class MyEnumerable : IEnumerable
{
// поле
protected MyEnumerator myEnumerator = new MyEnumerator();
// конструктор
public MyEnumerable(int[] values)
{
myEnumerator.AddValues(values);
}
// методы
public IEnumerator GetEnumerator()
{
return myEnumerator;
}
}
// главный класс программы
class Program
{
static void Main(string[] args)
{
// создаем и заполняем MyEnumerable
int[] values = {5, 8 ,12, 6, 23, 56, 22, 55};
MyEnumerable myEnumerable = new MyEnumerable(values);
// используя foreach проходим по всему MyEnumerable
foreach (int value in myEnumerable)
{
// показываем на экране значение
Console.WriteLine(value);
}
}
}
}