Archived post: posted sometime between 2016 and 2022.

GetEnumerator and GetAsyncEnumerator both return a new instance of an enumerator.

GetEnumerator and GetAsyncEnumerator return a new instance of an enumerator. As a result...

var e1 = sequence.GetEnumerator();
var e2 = sequence.GetEnumerator();
Console.WriteLine(e1 == e2); // false!!!

Corollary1: if we call e1.MoveNext() , the Current value changes in e1 but not in e2 .

Corollary2: The following will produce surprising results.

while(sequence.GetEnumerator().MoveNext()) 
{
    Console.WriteLine(sequence.GetEnumerator().Current); // always empty

Corollary3: If I ruled the world, we might rename it to CreateNewEnumerator .