using System; using System.Collections.Generic; interface I : I2, IEnumerable { } interface I2 { void Foo (IEnumerable list) where U : T2; } class Impl : I { public void Foo (IEnumerable list) where U : T { } public IEnumerator GetEnumerator () { return null; } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator () { return null; } } class A { public I Value = new Impl (); } class Test : A { public void Foo () { var a = new Test (); a.Value.Foo (Value); } } class M { public static void Main () { new Test ().Foo (); } }