В C# IEnumerable<T>
и IEnumerator
являются интерфейсами, которые используются для перебора коллекций, но выполняют разные задачи.
IEnumerable<T>
IEnumerable<T>
представляет коллекцию, которая может быть перечислена. Он определяет метод GetEnumerator()
, который возвращает объект IEnumerator<T>
.
Пример реализации:
public class MyCollection : IEnumerable<int>
{
private int[] items = { 1, 2, 3 };
public IEnumerator<int> GetEnumerator()
{
foreach (var item in items)
{
yield return item;
}
}
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
IEnumerator<T>
IEnumerator<T>
представляет итератор, который позволяет перебирать элементы коллекции. Он определяет методы:
MoveNext()
– переходит к следующему элементу,Current
– возвращает текущий элемент,Reset()
– сбрасывает итератор в начальное состояние.
Пример работы с IEnumerator<T>
:
IEnumerator<int> enumerator = new MyCollection().GetEnumerator();
while (enumerator.MoveNext())
{
Console.WriteLine(enumerator.Current);
}
Отличия IEnumerable<T>
и IEnumerator<T>
Характеристика | IEnumerable<T> | IEnumerator<T> |
---|---|---|
Назначение | Представляет коллекцию | Управляет процессом итерации |
Методы | GetEnumerator() | MoveNext() , Current , Reset() |
Использование | Используется в foreach | Используется вручную |
IEnumerable<T>
предоставляет интерфейс для коллекции, а IEnumerator<T>
управляет процессом итерации. foreach
автоматически использует эти интерфейсы для удобного перебора элементов.