В двух словах, IEnumerable предоставляет перечислитель, который позволяет поддерживать простую итерацию для неуниверсальной коллекции.
Это в основном позволяет циклы foreach над коллекцией, т. Е .:
foreach (Control control in this.Controls)
{
// Do something
}
Единственный метод, который вам нужно реализовать для использования IEnumable в вашем собственном классе, это GetEnumerator()
, который возвращает IEnumerator
.
IEnumerator, который вы возвращаете, должен быть классом, который реализует следующие методы:
void Reset();
object Current();
bool MoveNext();
Базовый пример класса IEnumerator, взятый из здесь :
private class ClassEnumerator : IEnumerator
{
private ClassList _classList;
private int _index;
public ClassEnumerator(ClassList classList)
{
_classList = classList;
_index = -1;
}
#region IEnumerator Members
public void Reset()
{
_index = -1;
}
public object Current
{
get
{
return _classList._students[_index];
}
}
public bool MoveNext()
{
_index++;
if (_index >= _classList._students.Count)
return false;
else
return true;
}
#endregion
}