title: Why can't generic methods choose a specific method when the generic one doesn't match?
body: <p>Given the following class:</p>
  
  <pre><code>public static class MWE
  {
      public static void Foo&lt;T, TColl&gt;(Expression&lt;Func&lt;IFoo, bool&gt;&gt; bar, TColl foos)
          where TColl : IEnumerable&lt;T&gt;
      {
      }
  
      public static void Foo&lt;T, TColl&gt;(Expression&lt;Func&lt;IFoo, T&gt;&gt; bar, TColl foos)
          where TColl : IEnumerable&lt;T&gt;
      {
      }
  
      static MWE()
      {
          Foo(bar =&gt; bar.GetThing(), new List&lt;IThing&gt;());
          Foo(bar =&gt; bar.GetBool(), new List&lt;IThing&gt;());
      }
  }
  
  public interface IFoo
  {
      IThing GetThing();
  
      bool GetBool();
  }
  </code></pre>
  
  <p>I get a compilation error on the second call to <code>Foo</code>, complaining that there's no conversion from <code>List&lt;IThing&gt;</code> to <code>IEnumerable&lt;bool&gt;</code>. It seems to me that the compiler doesn't see the first overload, although it matches (and the second doesn't).</p>
  
  <p>Why? Is there a way these two methods can co-exist and work?</p>