首先说终极被继承的接口IEumerable<T>
它是干什么的呢,说白了就是一个 迭代器的实现 让foreach 可以使用循环遍历还不需要去知道其中原理
所以说他是集合中必不可少的用到的迭代 所以每个集合和接口都继承他是理所应当的。
再来说ICollection<T> 定义操作泛型集合的方法,可以看到截图中有一些封装的处理集合的方法
再来看list又多了一些方法
可以理解为越来越丰富了一些方法 list更为全面>collection>Eumerable
而接口ICollection<T>、IEumerable<T>无非就是泛型接口类 不能实例化对象是能用静态对象,
而list、collection可以用动态对象
而linq对IEumerable进行了扩展封装,使得linq使用的时候可以用到很多的方法。
-
按照功能排序:List<T> 》IList<T> 》ICollection<T>》IEnumerable<T>
-
按照性能排序:IEnumerable<T>》ICollection<T>》IList<T>》List<T>
所以定义对象的时候应该怎么选择呢?
● 如果只想遍历集合,使用IEnumerable, IEnumerable<T>
● 如果想遍历、修改集合,以及需要延迟加载的导航属性,使用ICollection, ICollection<T>
● 如果想遍历、修改、添加、清空、使用索引,使用IList, IList<T>
IEnumerator
如果一个类实现了IEnumerator,也就是实现Current属性,MoveNext方法,Reset方法。只要实现这些方法,这个类就可以用foreach这种语法了。
Eumerable 对象是linq中静态类里面的一些方法 是对于IEnumerable的扩展 所以当使用linq的时候里面一些方法都可以用是
因为对最终极的IEnumerable进行了扩展。