title: How is it possible to create instance of IList?
body: <p>In C# I understand that one cannot create an instance of an interface:</p>
  
  <pre><code>&gt; new IList&lt;double&gt;()
  (1,1): error CS0144: Cannot create an instance of the abstract class or interface 'IList&lt;double&gt;'
  </code></pre>
  
  <p>But today I saw the following code:</p>
  
  <pre><code>&gt; new IList&lt;double&gt;[3]
  IList&lt;double&gt;[3] { null, null, null }
  </code></pre>
  
  <p>Isn't that strange! How is this possible?</p>
  
  <p>In particular, how can null be an element, when double is non-nullable? </p>
  
  <pre><code>&gt; new List&lt;double&gt; { null }
  (1,20): error CS1950: The best overloaded Add method 'List&lt;double&gt;.Add(double)' for the collection initializer has some invalid arguments
  (1,20): error CS1503: Argument 1: cannot convert from '&lt;null&gt;' to 'double'
  </code></pre>
  
  <p>What's going on?</p>