using System; using System.Collections; using System.Collections.Generic; class MyList<T> : IEnumerable<T> { public IEnumerator<T> GetEnumerator () { yield break; } IEnumerator IEnumerable.GetEnumerator () { return GetEnumerator (); } } struct Foo<T> { public readonly T Data; public Foo (T data) { this.Data = data; } } class X { public static void Main () { MyList<Foo<int>> list = new MyList <Foo<int>> (); foreach (Foo<int> foo in list) ; } }