Pregunta sobre la covarianza de C #

En el siguiente código:

interface I1 { }
class CI1: I1 { }

List<CI1> listOfCI1 = new List<CI1>();

IEnumerable<I1> enumerableOfI1 = listOfCI1; //this works

IList<I1> listofI1 = listOfCI1; //this does not

Puedo asignar mi "listOfCI1" a unIEnumerable<I1> (debido a covarianza)

Pero, ¿por qué no puedo asignarlo a unIList<I1>? Por lo demás, ni siquiera puedo hacer lo siguiente:

List<I1> listOfI12 = listOfCI1;

¿No debería la covarianza permitirme asignar un tipo derivado a un tipo base?

Respuestas a la pregunta(4)

Su respuesta a la pregunta