IEnumerable<T>
представляет последовательность, которую можно перечислить - например, список.
IEnuerator<T>
эффективно представляет курсор в последовательности .
Итак, представьте, что у вас есть последовательность - вы можете повторить ее с несколькими «курсорами» одновременно.Например:
List<string> names = new List<string> { "First", "Second", "Third" };
foreach (string x in names)
{
foreach(string y in names)
{
Console.WriteLine("{0} {1}");
}
}
Здесь List<string>
реализует IEnumerable<string>
, а foreach
повторяет каждый вызов GetEnumerator()
для получения IEnumerator<string>
.Поэтому, когда мы находимся в середине внутреннего цикла, есть два независимых курсора, повторяющихся в одной последовательности.