List,IList,IEnumerable的区别

注:foreach中in后面的对象应该是实现IEnumerable接口的,程序运行时本质是在调用IEnumerable的GetEnumerator函数来返回一个IEnumerator对象,foreach就是利用IEnumerator对象的Current,MoveNext和Reset成员来进行一段数据的枚举。

List是类,IList,IEnumerable是接口。

(1)IEnumerable:使用的是LINQ to Object方式,它会将AsEnumerable()时对应的所有记录都先加载到内存,然后在此基础上再执行后来的Query

(2)IQeurable(IQuerable<T>):不在内存加载持久数据,因为这家伙只是在组装SQL,(延迟执行) 到你要使用的时候,例如 list.Tolist() or list.Count()的时候,数据才从数据库进行加载 (AsQueryable())。

(3)IList(IList<T>)会立即在内存里创建持久数据,这就没有实现“延期执行(deferred execution)”,而是一次性将数据加载进来,如果被加载的实体有关联实体(associations),此关联实体不会被加载(既不立即加载,也不延迟加载),是 ICollection 泛型接口的子代,作为所有泛型列表的基接口,在用途方面如果作为数据集合的载体这是没有问题,只是如果需要对集合做各种的操作,例如 排序 编辑 统计等等,它不行。

(4).List <>是泛型类

原文地址:https://www.cnblogs.com/yxcn/p/13556459.html