C#中IEnumerable<ICollection<IList、List之间的区别

C#中IEnumerable、ICollection、IList、List之间的区别

 

今天在复习的时候,看到IEnumerable、ICollection,在用Code first的时候,写class的映射关系的时候,用的是ICollection这个集合,在用Linq的时候用的是IEnumberable。顿时蒙蔽了。。。

记录下。

首先我看看 IEnumerable: 

IEnumerable<T> 实现IEnumerable接口方法,那IEnumberable做什么的,其实就提高可以循环访问的集合。说白了就是一个迭代

再来看看ICollection: 

原来ICollection<T> 同时继承IEnumerable<T>和IEnumerable两个接口,按我的理解就是,ICollection继续它们2个接口而且扩展了方法,功能强多了。 
由原来的步枪变成半自动步枪;长江后浪退前浪了~~~~~~~~~~

我们继续看IList: 

IList 继承它们三个接口,怪不得功能这么多啊,那应该属于全自动步枪了

最后来看看List:

public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable

这个时候大家仔细看看,它们都是接口,只有List 是类,不仅实现它们的接口,而且还扩展了太多的方法给我利用。哇靠,几乎所有功能都能实现了,简直是激光步枪

按照功能排序:List<T> 《IList<T> 《ICollection<T>《IEnumerable<T>

按照性能排序:IEnumerable<T>《ICollection<T>《IList<T>《List<T>

 

3.1 ICollection<T>接口
   ICollection<T>接口定义了泛型集合接口,
       所谓泛型集合,即使用了.net Framework提供的泛型特性,
       使集合限定为只存储一种特定类型对象引用或值类型的数据的集合
       泛型集合增强了集合访问的效率和安全性。
       由于存储类型已被确定,所以ICollection<T>比ICollection接口提供了更多的方法,
       包括添加到集合,从集合删除以及判断一个对象引用(或对象值)是否在集合中存在。

3.2 IEnumerable<T>接口
  ICollection<T>接口实现了IEnumerable<T>接口,主要用来返回一个实现了实现了IEnumerator<T>接口的,确定类型的迭代子对象。
  参考ICollection<T>的继承关系

 

 

 枚举器和可枚举类型 - ProZkb - 博客园 (cnblogs.com)

posted @ 2019-11-28 16:48  ProZkb  阅读(342)  评论(0编辑  收藏  举报