public IEnumerator GetEnumerator()
for (int index = 0; index < values.Length; index++)
yield return values[(index + startingPoint) % values.Length];
This small code block of c#2 replaces the entire Iterator class. The trick here is in the yield return statement. When you write this statement you actually ask .Net to create a state machine for you. This statement is keeping track of what we were doing when we last returned a value. Every time the yield return statement is hit the method returns but when the calling method ask for the next element in the IEnumerable collection you re-enter the method just after the last yield return statement as you would never have left it. All the state of the local variables inside the IEnumerator method is preserved. What is also important to understand is that trick is not performed by the runtime but by the compiler so you don’t incurs real performance lost.