<p>I understand that, if <code>S</code> is a child class of <code>T</code>, then a <code>List&lt;S&gt;</code> is <strong>not</strong> a child of <code>List&lt;T&gt;</code>. Fine. But interfaces have a different paradigm: if <code>Foo</code> implements <code>IFoo</code>, then why is a <code>List&lt;Foo&gt;</code> not (an example of) a <code>List&lt;IFoo&gt;</code>?</p>

<p>As there can be no actual class <code>IFoo</code>, does this mean that I would always have to cast each element of the list when exposing a <code>List&lt;IFoo&gt;</code>? Or is this simply bad design and I have to define my own collection class <code>ListOfIFoos</code> to be able to work with them? Neither seem reasonable to me... </p>

<p>What would be the best way of exposing such a list, given that I am trying to program to interfaces? I am currently tending towards actually storing my <code>List&lt;Foo&gt;</code> internally as a <code>List&lt;IFoo&gt;</code>.</p>

MASSIVE EDIT
You'll be able to do it with C# 4.0, but
[thanks Jon]
You can get around it using
```
ConvertAll
```
:
```
```
public List<IFoo> IFoos()
{
    var x = new List<Foo>(); //Foo implements IFoo
    /* .. */
    return x.ConvertAll<IFoo>(f => f); //thanks Marc
}
```
```