You make things a little more confusing than they should be using the list here ... the easiest way to see the effect is this:
Foo<Bar> fooBar = new Foo<MyBar>();
Given that this does not compile, it is not surprising that you cannot add Foo<MyBar>toList<Foo<Bar>>
So why not Foo<MyBar>a Foo<Bar>? Since general classes are not covariant.
General variance was introduced only in C # 4, and it only works for interfaces and delegates. This way you can (in C # 4):
IEnumerable<MyBar> x = new List<MyBar>();
IEnumerable<Bar> y = x;
but you could not:
IList<MyBar> x = new List<MyBar>();
IList<Bar> y = x;
, - NDC 2010 - "".