public class Z { } public class A where Y : Z where X : Y { public X Foo (Y y) { return y as X; } } public class Foo { public static int Main () { var a = new A (); if (a.Foo (new Z ()) == null) return 1; return 0; } }