Covariance works only for reference types, not for value types. So a List is assignable to an IEnumerable because string is a reference type, but a List is not assignable to an IEnumerable. See section 13.1.3.2 of the C# language specifications for details