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