Посмотрите на следующий пример (частично взятый из Блог MSDN):
class Animal { }
class Giraffe : Animal { }
static void Main(string[] args)
{
// Array assignment works, but...
Animal[] animals = new Giraffe[10];
// implicit...
List<Animal> animalsList = new List<Giraffe>();
// ...and explicit casting fails
List<Animal> animalsList2 = (List<Animal>) new List<Giraffe>();
}
Является ли это проблемой ковариации? Будет ли это поддерживаться в будущем выпуске С# и есть ли какие-нибудь умные способы обхода (используя только .NET 2.0)?