From this Link :
There are 2 ToString overloads here.
Convert.ToString(object o); Convert.ToString(string s);
The C # compiler essentially tries to choose the most specific overload that will work with input. A null value is converted to any reference type. In this case, the string is more specific than the object, and therefore it will be selected as the winner.
In an object null as an object, you have strengthened the type of expression as an object. This means that it is no longer compatible with line overloading, and the compiler chooses to overload the object, since it is the only compatible one.
The really hairy details of how this breaking work is described in section 7.4.3 of the C # language specification.
Kf2
source share