title: Function with IFormattable parameter won't accept a String
body: <p>I have a function where I processed a string input.</p>
  
  <pre><code>    public string Foo(string text)
      {
          // do stuff with text and
          // return processed string
      }
  </code></pre>
  
  <p>I was calling this from a lot of places where I was converting a guid to a string like this:</p>
  
  <pre><code>string returnValue = Foo(bar.ToString());
  </code></pre>
  
  <p>What I actually wanted was to accept as an input any object type that could be converted to a string. So I tried modifying the function as follows:</p>
  
  <pre><code>    public string Foo(IFormattable text)
      {
          var textAsString = text.ToString();
          // do stuff with textAsString 
          // and return processed string
      }
  </code></pre>
  
  <p>This means all my calls are simpler:</p>
  
  <pre><code>string returnValue = Foo(bar);
  </code></pre>
  
  <p>It works for all object types that have a .ToString method; Except strings :)</p>
  
  <p>If I try passing a string to the function I get the following compile error:</p>
  
  <pre><code>Argument type 'string' is not assignable to parameter type 'System.IFormattable'  
  </code></pre>
  
  <p>Which seems really odd because String HAS a ToString() method.</p>
  
  <p>Why doesn't this work?</p>