IEnumerable、IEnumerator、ICollection、IList、IQeurable 详解

都是I开发,所以都是接口。

   IEnumerator:集合访问器,基础的;没有它,就不能使用forearch遍历集合或数组,任何支持GetEnumerator()方法的类型都可以通过foreach结构进行运算。也可用 lamda 表达式查询。

   IEnumerable:只包含一个抽象方法GetEnumerator(),返回一个可循环访问集合的IEnumerator对象。

  IEnumerable<T> 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了

     IList(IList<T>)会立即在内存里创建持久数据,这就没有实现“延期执行(deferred execution)”,如果被加载的实体有关联实体(associations),此关联实体不会被加载(既不立即加载,也不延迟加载)。

   IQueryable<T> 是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令,它并不是把所有数据都加载到内存里来才进行条件过滤.

    IQeurable(IQuerable<T>)不会立即在内存里创建持久数据,只有遍历它(如通过foreach)、把它转换成List等情况下才会向内存加载数据,它可以实现“延期执行”,如果当前被加载的实体有关联实体(associations),此关联实体可被接下来的访问加载。

  IList与List 通俗一点讲,只能存放同一类型的元素,强类型,不需转换。

  ArrayList:数组可存放不同的类型。元素都转Object,所以需要强制转换一下。