Overloaded string methods with string interpolation : <p>Why does string interpolation prefer overload of method with <code>string</code> instead of <code>IFormattable</code>?</p>

<p>Imagine following:</p>

<pre><code>static class Log {
    static void Debug(string message);
    static void Debug(IFormattable message);
    static bool IsDebugEnabled { get; }
}
</code></pre>

<p>I have objects with very expensive <code>ToString()</code>. Previously, I did following:</p>

<pre><code>if (Log.IsDebugEnabled) Log.Debug(string.Format("Message {0}", expensiveObject));
</code></pre>

<p>Now, I wanted to have the IsDebugEnabled logic inside <code>Debug(IFormattable)</code>, and call ToString() on objects in message only when necessary.</p>

<pre><code>Log.Debug($"Message {expensiveObject}");
</code></pre>

<p>This, however, calls the <code>Debug(string)</code> overload.</p>
