The Convert class has been in existence since .NET 1.0. The IConvertible interface has also existed since this time.
The Convert.ChangeType method only works on objects of types that implement IConvertible (in fact, unless I'm mistaken, all of the conversion methods provided by the Convert class are this way). So why is the parameter type object?
In other words, instead of this:
public object ChangeType(object value, Type conversionType);
Why isn't the signature this?
public object ChangeType(IConvertible value, Type conversionType);
Just seems strange to me.
Looking in reflector you can see the top of
ChangeType(object, Type, IFormatProvider), which is what's called under the covers:So it looks like an object of a type that doesn't implement
IConvertiblebut already is the destination type will just return the original object.Granted it looks like this is the only exception to the value needing to implement
IConvertible, but it is an exception, and looks like the reason the parameter isobjectinstead.Here's a quick LinqPad test for this case: