我们可以很清楚的发现泛型参数中有out关键字修饰,也就是说,我们的IEnumerable是支持协变的。我们可以很轻松的将IEnumerable类型的数据转换成其他数据,例如:
IEnumerable<string> strs = new IEnumerable<string>(); IEnumerable<object> obj = strs;因此我通常在使用的时候,我会推荐使用IEnumerable来代替List的一些数据操作。
IList接口老规矩,先看看元数据
public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable { //省略 }这里就可以发现IList并不支持协变,属于不变式,那么下列用法是不合法的:
IList<string> strs = new IList<string>(); IList<object> obj = strs;如果我的文章帮助了您,请您在github .NET Core Guide项目帮我点一个star,在博客园中点一个关注和推荐。