首先说终极被继承的接口IEumerable<T> 

它是干什么的呢,说白了就是一个 迭代器的实现  让foreach 可以使用循环遍历还不需要去知道其中原理

所以说他是集合中必不可少的用到的迭代 所以每个集合和接口都继承他是理所应当的。

再来说ICollection<T> 定义操作泛型集合的方法,可以看到截图中有一些封装的处理集合的方法

再来看list又多了一些方法

可以理解为越来越丰富了一些方法  list更为全面>collection>Eumerable  

而接口ICollection<T>、IEumerable<T>无非就是泛型接口类 不能实例化对象是能用静态对象,

而list、collection可以用动态对象

而linq对IEumerable进行了扩展封装,使得linq使用的时候可以用到很多的方法。

  1. 按照功能排序:List<T> 》IList<T> 》ICollection<T>》IEnumerable<T>

  2. 按照性能排序:IEnumerable<T>》ICollection<T>》IList<T>》List<T>

所以定义对象的时候应该怎么选择呢?

● 如果只想遍历集合,使用IEnumerable, IEnumerable<T>
● 如果想遍历、修改集合,以及需要延迟加载的导航属性,使用ICollection, ICollection<T>
● 如果想遍历、修改、添加、清空、使用索引,使用IList, IList<T> 

list、Ilist、ICollection、IEumerable

list、Ilist、ICollection、IEumerable

IEnumerator

      如果一个类实现了IEnumerator,也就是实现Current属性,MoveNext方法,Reset方法。只要实现这些方法,这个类就可以用foreach这种语法了。

list、Ilist、ICollection、IEumerablelist、Ilist、ICollection、IEumerable

Eumerable  对象是linq中静态类里面的一些方法 是对于IEnumerable的扩展 所以当使用linq的时候里面一些方法都可以用是

因为对最终极的IEnumerable进行了扩展。

list、Ilist、ICollection、IEumerable

相关文章: