<p>Looking at <code>System.Collections.Generic.Dictionary&lt;TKey, TValue&gt;</code>, it clearly implements <code>ICollection&lt;KeyValuePair&lt;TKey, TValue&gt;&gt;</code>, but doesn't have the required "<code>void Add(KeyValuePair&lt;TKey, TValue&gt; item)</code>" function.</p>

<p>This can also be seen when trying to initialize a <code>Dictionary</code> like this:</p>

<pre><code>private const Dictionary&lt;string, int&gt; PropertyIDs = new Dictionary&lt;string, int&gt;()
{
    new KeyValuePair&lt;string,int&gt;("muh", 2)
};
</code></pre>

<p>which fails with </p>

<blockquote>
  <p>No overload for method 'Add' takes '1' arguments</p>
</blockquote>

<p>Why is that so?</p>

The expected API is to add via the two argument
```
Add(key,value)
```
method (or the
```
this[key]
```
indexer); as such, it uses explicit interface implementation to provide the
```
Add(KeyValuePair<,>)
```
method.
If you use the
```
IDictionary<string, int>
```
interface instead, you will have access to the missing method (since you can't hide anything on an interface).
Also, with the collection initializer, note that you can use the alternative syntax:
```
```
Dictionary<string, int> PropertyIDs = new Dictionary<string, int> {
  {"abc",1}, {"def",2}, {"ghi",3}
}
```
```
which uses the
```
Add(key,value)
```
method.