using System.Collections;
using System.Collections.Generic;
public static void Main()
var stateless = new Stateless();
var getNumbers = stateless.GetNumbers();
Console.WriteLine("Printing the state-less IEnumerable once:");
Console.WriteLine("Printing the state-less IEnumerable twice:");
getNumbers = stateless.GetNumbersYield();
Console.WriteLine("Printing the state-less yielded IEnumerable once:");
Console.WriteLine("Printing the state-less yielded IEnumerable twice:");
var statefull = new Statefull();
getNumbers = statefull.GetNumbers().ToIEnumerable();
Console.WriteLine("Printing the state-full IEnumerable once:");
Console.WriteLine("Printing the state-full IEnumerable twice:");
private static void Print(IEnumerable<int> toPrint){
foreach(int i in toPrint){
Console.WriteLine("No Elements");
private List<int> integers = new List<int> {1, 2, 3, 4};
public IEnumerable<int> GetNumbers(){
public IEnumerable<int> GetNumbersYield(){
foreach(int i in integers){
public class Statefull : IEnumerable<int>
IEnumerator IEnumerable.GetEnumerator()
return this.GetNumbers();
IEnumerator<int> IEnumerable<int>.GetEnumerator()
return this.GetNumbers();
public IEnumerator<int> GetNumbers(){
for(int i = 1; i<5; i++){
public static class IterationHelper
public static IEnumerable<T> ToIEnumerable<T>(this IEnumerator<T> enumerator)
while (enumerator.MoveNext())
yield return enumerator.Current;