title: KeyValuePair type inference inside Dictionary initializer
body: <p>I'm building a <code>Dictionary</code> with key type <code>KeyValuePair</code>. When using <code>KeyValuePair.Create</code> inside <code>Dictionary</code> initializer it doesn't require template types and it inferred the type correctly, the following compiles correctly without even a warning:</p>
  
  <pre><code>private static readonly IDictionary&lt;KeyValuePair&lt;Market, MarketData&gt;, string&gt; channelDict =
      new Dictionary&lt;KeyValuePair&lt;Market, MarketData&gt;, string&gt; {
          { KeyValuePair.Create(Market.USD, MarketData.Trade), "trades" },
          ...
  };
  </code></pre>
  
  <p>Now the code was reorganized, type <code>Market</code> and <code>MarketData</code> was moved to a separate project and namespace, and the namespace is imported by <code>using</code> statements at the top of the file, but now the same code won't compile, it throws this error:</p>
  
  <pre><code>error CS0305: Using the generic type 'KeyValuePair&lt;TKey, TValue&gt;' requires 2 type arguments
  </code></pre>
  
  <p>I can be sure that <code>using</code> namespace imported correctly, because simple add <code>private Market _m;</code> didn't produce any error, what's more, the definition of the dictionary:</p>
  
  <pre><code>private static readonly IDictionary&lt;KeyValuePair&lt;Market, MarketData&gt;, string&gt; channelDict =
      new Dictionary&lt;KeyValuePair&lt;Market, MarketData&gt;, string&gt;
  </code></pre>
  
  <p>did not produce error neither, it is the <code>Create</code> method cannot compile:</p>
  
  <pre><code>KeyValuePair.Create(Market.USD, MarketData.Trade)
  </code></pre>
  
  <p>So why it cannot infer the type now when type arguments is in another namespace, while it can before?</p>