Мне трудно понять, почему массивы в C# являются ковариантными и какие преимущества может принести эта ковариантность. Рассмотрим следующий тривиальный пример кода:
object[] myArray = new string[1];
myArray[0] = 1;
Этот код будет нормально компилироваться, но бесцеремонно и, возможно, неудивительно, взорвется во время выполнения.
Если я попытаюсь сделать то же самое с помощью дженериков, компилятор будет ворчать на меня, и я осознаю свою глупость на ранней стадии, поэтому мой вопрос таков: почему компилятор C# допускает эту ковариантность с массивами и, кроме того, каковы потенциальные преимущества?