1、因为IEnumeable<out T>,当然本质上是因为IEnumerable<T>中的T只用于输出(只出现在返回值),所以可以加out标记,而IList<T>中的T用于输入和输出(出现在参数和返回值),不能逆变协变。
2、协变和逆变的意义在于避免不必要的类型转换,简化代码和提高性能。