public class GenericClass { public void SimpleMethod () { T a = default (T); T b = a; T c; if (SimpleClass.cond) c = a; else c = b; } public void SimpleMethod2 (ref T a) { T b = a; T c; if (SimpleClass.cond) c = a; else c = b; a = c; } } public class SimpleClass { public static bool cond; public void GenericMethod () { T a = default (T); T b = a; } public void GenericMethod (T t) { T a = t; t = a; } } public class ComplexClass { public static bool cond; public void GenericMethod (K k) { T a = default (T); T b = a; } public void GenericMethod (K k, T t) { T a = t; t = a; } } public class Driver { public static int Main () { new GenericClass().SimpleMethod (); new SimpleClass().GenericMethod(); new SimpleClass().GenericMethod(10); new ComplexClass().GenericMethod(1.1f); new ComplexClass().GenericMethod(2.2f, 10); return 0; } }