Question about C# covariance
问题 In the code below: interface I1 { } class CI1: I1 { } List<CI1> listOfCI1 = new List<CI1>(); IEnumerable<I1> enumerableOfI1 = listOfCI1; //this works IList<I1> listofI1 = listOfCI1; //this does not I am able to assign my \"listOfCI1\" to an IEnumerable<I1> (due to covariance) But why am I not able to assign it to an IList<I1> ? For that matter, I cannot even do the following: List<I1> listOfI12 = listOfCI1; Shouldn\'t covariance allow me to assign a derived type to a base type? 回答1: Simply