using System; class C where T : C { public static void Foo (U arg) where U : C, new () { var i = new U (); { var ii = new U (); Func f = () => i; { Action a = () => C.Run (ii); a (); } f (); } } static void Run (T a) { } } class D : C { } class E : C { } class A { public static int Main () { D.Foo (new E ()); return 0; } }