Насколько он не работает, может быть полезно понять ковариацию и контравариантность .
Просто чтобы показать, почему этот не должен , это изменение кода, который вы указали:
void DoesThisWork()
{
List DerivedList = new List();
List BaseList = DerivedList;
BaseList.Add(new B());
C FirstItem = DerivedList.First();
}
Должно ли это работать? Первый элемент в списке относится к типу «B», но тип элемента DerivedList - C.
Теперь предположим, что мы действительно просто хотим создать общую функцию, которая работает в списке некоторых тип, который реализует A, но нам все равно, какой тип:
void ThisWorks(List GenericList) where T:A
{
}
void Test()
{
ThisWorks(new List());
ThisWorks(new List());
}