The overload resolution rules in C# can be a bit tricky. Following is a code snippet which finds the Max between 2 numbers. using the System.Math libraries. public double Max(double d1, double d2) { Console.WriteLine("In Max(double,double)"); return Math.Max(d1, d2); } public int Max(int i1, int i2) { Console.WriteLine("In Max(int,int)"); return Math.Max(i1, i2); } public T Max<T>(T t1, T t2) where T : IComparable<T> { Console.WriteLine("In Max<T,T>"); return t1.CompareTo(t2) > ......