List<T>,ArrayList,IEnumerable的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了List<T>,ArrayList,IEnumerable的区别相关的知识,希望对你有一定的参考价值。
如题,我用vs2008,c#.net,3个都是集合类型,3个的区别是什么呢
参考技术A 数据源不只是Ilist这样的,还可能是DataTable或者其他的语言集成查询 (LINQ) 查询适用于实现 IEnumerable<(Of <(T>)>) 接口或 IQueryable 接口的数据源。DataTable 类不实现上述任何一个接口,因此您必须调用 AsEnumerable 方法来将 DataTable 用作 LINQ 查询的 From 子句中的源。
ICollection主要针对静态集合;IList主要针对动态集合
IEnumerable<T>继承自IEnumerable
ICollection<T>继承自IEnumerable<T>
IList<T>继承自ICollection<T>
IEnumerable接口
实现了IEnumerable接口的集合表明该集合能够提供一个enumerator(枚举器)对象,支持当前的遍历集合。IEnumerable接口只有一个成员GetEnumerator()方法。
IList接口和ArrayList类的目的是实现动态数组,ArrayList是IList的一个实现。
看看MSDN
ArrayList与List<T>笔记
ArrayList是在System.Collections命名空间的一个类, 通过Add的方法添加一个项, 当进到这个类的元数据时, 可以看到这个方法的参数是一个object
public virtual int Add(object value)
所以在添加一个项时需要进行一次装箱的操作, 读取一个数据时需要一个拆箱的操作, 所以用ArrayList必然影响性能, 特别是项较多的时候进行读写, 至少要进行一次的装箱一次拆箱, 所花的时候也应该是更多
List<T>通过Add方法添加一个项是通过直接的类型来添加 public void Add(T item) 所以不需要再进行装箱与拆箱, 可以节省部分时间, 看下面的代码测试:
代码
当你运行看结果时你就知道相差的结果了, 所以在代码当中, 尽量使用List<int>来代替ArrayList
以上是关于List<T>,ArrayList,IEnumerable的区别的主要内容,如果未能解决你的问题,请参考以下文章
哪个更好?数组、ArrayList 或 List<T>(在性能和速度方面)