In C# I understand that one cannot create an instance of an interface:

```
> new IList<double>()
(1,1): error CS0144: Cannot create an instance of the abstract class or interface 'IList<double>'

```

But today I saw the following code:

```
> new IList<double>[3]
IList<double>[3] { null, null, null }

```

Isn't that strange! How is this possible?

In particular, how can null be an element, when double is non-nullable? 

```
> new List<double> { null }
(1,20): error CS1950: The best overloaded Add method 'List<double>.Add(double)' for the collection initializer has some invalid arguments
(1,20): error CS1503: Argument 1: cannot convert from '<null>' to 'double'

```

What's going on?