title: IDictionary, Dictionary
body: <p>I have:</p>
  
  <pre><code>IDictionary&lt;string, IDictionary&lt;string, IList&lt;long&gt;&gt;&gt; OldDic1; 
  </code></pre>
  
  <p>(just for illustration purposes, it is instantiated and has values - somewhere else)</p>
  
  <p>Why can I do this: ?</p>
  
  <pre><code>Dictionary&lt;string, IDictionary&lt;string, IList&lt;long&gt;&gt;&gt; dic1 = 
    OldDic1 as Dictionary&lt;string, IDictionary&lt;string, IList&lt;long&gt;&gt;&gt;;
  </code></pre>
  
  <p>Basically dic1 after executing this line has all the values from OldDic1; works.</p>
  
  <p>However when I do this:   </p>
  
  <pre><code>Dictionary&lt;string, Dictionary&lt;string, List&lt;long&gt;&gt;&gt; dic1 = 
    OldDic1 as Dictionary&lt;string, Dictionary&lt;string, List&lt;long&gt;&gt;&gt;;
  </code></pre>
  
  <p>I get null, it is the same as casting except it doesn't crash and instead it returns null. So the question is why I can't cast it from the interfaces to types? is there solution, other then changing how it is stored in the first place?</p>