From the documentation:
How arguments are formatted:
Format items are processed sequentially from the beginning of the string. Each format item has an index that corresponds to an object in the method's argument list. The Format method retrieves the argument and derives its string representation as follows:
- If the argument is
null
, the method insertsString.Empty
into the result string. - If you call the
Format(IFormatProvider, String, Object[])
overload and the provider parameter implements theICustomFormatter
interface, the argument is passed to the provider object'sICustomFormatter.Format(String, Object, IFormatProvider)
method. If the format item includes a formatString argument, it is passed as the first argument to the method. If theICustomFormatter
implementation is able to provide formatting services, it returns the string representation of the argument; otherwise, it returnsnull
and the next step executes. - If the argument implements the IFormattable interface, its
IFormattable.ToString
implementation is called. - The argument's parameterless
ToString
method, which is either overridden or inherited from the Object class, is called.
So yes, finally - as a fallback - the ToString
method is called.