If you have an Interface IFoo and a class Bar : IFoo, why can you do the following:
List foo = new List();
The reason is that C# does not support co- and contravariance for generics in C# 3.0 or earlier releases. This is being implemented in C# 4.0, so you'll be able to do the following:
IEnumerable foo = new List();
Note that in C# 4.0, you can cast to IEnumerable
For more background on covariance and contravariance in C#, Eric Lippert has a nice blog series.