using System; using System.Linq; using System.Collections; using System.Collections.Generic; public class Test { public static void Main() { var A = new VisibleIterator("A"); var B = new VisibleIterator("B"); var C = new VisibleIterator("C"); var D = new VisibleIterator("D"); var foo = (A.Union(B).Union(C).Union(D)).ToList(); Console.WriteLine("---"); var bar = (A.Union(B.Union(C.Union(D)))).ToList(); Console.WriteLine("---"); var baz = (D.Union(C.Union(B.Union(A)))).ToList(); } } class VisibleIterator : IEnumerable { private readonly string name; public VisibleIterator(string name) { this.name = name; } public IEnumerator GetEnumerator() { for (var i = 0 ; i != 4 ; i++) { var res = name+i; Console.WriteLine(res); yield return res; } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } }