title: Overloaded method with string parameter is never called, the method with object parameter is called instead
body: <p>I don't understand why method <code>Value(string s)</code> is never called for elements 
  of <code>List&lt;string&gt;</code> when the list is passed into <code>ToString&lt;M&gt;(List&lt;M&gt; list)</code> method. Below is my test code extracted from LinqPad.</p>
  
  <p>I have no problems calling a proper <code>Value()</code> method while iterating through lists outside of <code>ToString&lt;M&gt;(List&lt;M&gt; list)</code>  method. </p>
  
  <p>Thank you!</p>
  
  <pre><code>void Main()
  {
      var list1 = new List&lt;string&gt;{"one","two","three"};
      var list2 = new List&lt;object&gt;{1,2,3};
      var list3 = new List&lt;long&gt;{1,2,3};
      "Strings".Dump();
      ToString&lt;string&gt;(list1);
      //list1.ForEach(i=&gt; Value(i)); // proper overload of Value() is called 
      "Objects".Dump();
      ToString&lt;object&gt;(list2);
      //list2.ForEach(i=&gt; Value(i));
      "Longs".Dump();
      ToString&lt;long&gt;(list3);
      //list3.ForEach(i=&gt; Value(i));
  }
  
  public static string ToString&lt;M&gt;(List&lt;M&gt; list) 
  {
  
      var sb = new StringBuilder();
      foreach(M i in list)
      {
          sb.AppendFormat("{0},", Value(i));
      }
      var str = sb.ToString();
      str.Dump();
      return str;
  }
  
  
  public static string Value(string s)
  {
      "String".Dump();
      return "'" + s + "'";
  }
  
  // Define other methods and classes here
  public static string Value(object o)
  {
      "Object".Dump();
      return o.ToString();
  }
  </code></pre>
  
  <p>Here is the output. It shows that Value(string s) is never called</p>
  
  <pre><code>Strings
  Object
  Object
  Object
  one,two,three,
  Objects
  Object
  Object
  Object
  1,2,3,
  Longs
  Object
  Object
  Object
  1,2,3,
  </code></pre>