C# IEnumerable、IEnumerator、List、ArrayList、[]数组各各的区别是什么

Jave.Lin 2009-12-10 02:57:48
如题

最好把每一种的使用灵活生活的说一下。

再说说区别。
...全文
5035 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
meng_zhixiang 2011-10-25
  • 打赏
  • 举报
回复
有趣的一个问题,学习了
  • 打赏
  • 举报
回复
学习!大家说的好全面哦!懂了!谢了!
lixiandian 2011-02-23
  • 打赏
  • 举报
回复
前面的几位朋友讲的很好,让我对它们的理解有更深了!谢谢
longjiangxi 2010-11-09
  • 打赏
  • 举报
回复
vrhero讲的很好。
yuanxing19870710 2010-09-19
  • 打赏
  • 举报
回复
vrhero 你很棒!
fww0404 2010-09-18
  • 打赏
  • 举报
回复
[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/]
王建野 2010-08-14
  • 打赏
  • 举报
回复
虚心学习下。
brightmind2010 2010-06-09
  • 打赏
  • 举报
回复
学习一下,不要那么多的火药味。
longqi86 2010-05-28
  • 打赏
  • 举报
回复
学习下
woshifou 2009-12-28
  • 打赏
  • 举报
回复
学习下。
Beyond.FC 2009-12-28
  • 打赏
  • 举报
回复
学习一下。
Jave.Lin 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 vrhero 的回复:]
迭代是数学名词,和中文英文没什么关系...

很多人不懂说明很多人数学基础差,认真上过理工大学一年级的都应该懂,其实很多认真学习的高中生都懂,现在的中学奥数都有教...去补习一下线性代数...

MSDN和CSDN都不是学校,不负责基础教育...
[/Quote]

MSDN 不负责基础提供,那为什么MSDN有这么多的基础教程。

而且我没有说MSDN和CSDN是学校,你怎么就理解成都是学校了呢?

难道可以学习的地方就一定是学校?

这个也是数学的充分必要条件学的,补习一下吧。
cuike519 2009-12-11
  • 打赏
  • 举报
回复
先看这些类的说明,再看这些类的remarks,remarks里面一般详细介绍类的用法和意义。

如果要钻研其具体的差异,可以从接口以及内部实现来比较,这种比较可以通过reflector。
江南小鱼 2009-12-11
  • 打赏
  • 举报
回复
在程序中拼凑sql时,可以这样使用List<T>
List<SqlParameter> list=new List<SqlParameter>();
list.Add(new SqlParameter("参数名","参数值"));
...
SqlParameter[] para=list.ToArray();
...
江南小鱼 2009-12-11
  • 打赏
  • 举报
回复
能够使用foreach遍历的集合,必须继承IEnumberable(或IEnumerable<T>泛型接口)接口。
IEnumberable接口只有一个方法:
IEnumerator GetEnumberator(){}//返回一个IEnumberator类型的对象,该对象实现System.Collection.IEnumerator接口。
interface IEnumberator
{
object Current{get;}
bool MoveNext();
void Reset();
}
xzjxylophone 2009-12-11
  • 打赏
  • 举报
回复
顶下 ,支持。楼上说的都挺好,关键是要自己多写几个程序练习练习,具体的程序可以参考MSDN上的例子或者在网上搜索,并且是 IEnumerable<T>、IEnumerator<T>、List<T>、ArrayList、[]数组 一个一个的实现他们的例子,看的多了你就了解了并知道区别了,毕竟只有自己经历这些你才能完全的消化。现在这里有很多人都知道这些到底怎么用,但是很少有人总结这些区别,这个开创的举动交给你了 呵呵。。
RogerXi 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 linjf520 的回复:]
引用 12 楼 vrhero 的回复:
引用 11 楼 linjf520 的回复:
恩,这么说:
IEnumerable、IEnumerable <T>、ICollection都用于定长的。即:你所说的静态数组。
IList、ArrayList、List <T>都是非定长的。即:你所说的动态数组(我觉得就是链表)

乱理解,整个一团浆糊...为什么不去看MSDN?

IEnumerable表明对象是不确定类型的集合并支持简单迭代,是不是定长根本不关心...

IEnumerable <T>表明对象是指定类型的集合并支持简单迭代,是不是定长根本不关心...

ICollection是IEnumerable接口的派生接口,表明对象是不确定类型的集合并支持简单迭代,而且定义了集合的大小、枚举数和同步方法,这里的大小是指可以是定长的也可以是不定长的...

IList是ICollection和IEnumerable的派生接口,表明对象是不确定类型的集合并支持简单迭代,而且定义了集合的大小、枚举数和同步方法,还可以按照索引单独访问,这里的大小是指可以是定长的也可以是不定长的...

ArrayList类是IList接口的实现,表明对象是不确定类型的大小可按需动态增加的数组...

List <T>类是IList <T>接口的实现,是ArrayList类的泛型等效类并增强了功能,表明对象是可通过索引访问的对象的强类型列表...在.NET 2.0以上可以完全代替ArrayList,就是说ArrayList已经被淘汰...

而动态数组和链表在本质上是不同的...在.NET 2.0以上有双向链表LinkedList <T>泛型类,它也是继承自ICollection <T>,IEnumerable <T>,ICollection,IEnumerable...


迭代:我中文上不很懂。就别说我,很多人也没有真正可以用中英,描述:迭代是什么意思。

词典里也只能查到:迭代器,之类的东西。或是迭代周期之类的。

技术上你说得很不错。

顺便说一句:

要是MSDN 这么好理解好学习。

那CSDN 的存在是为了什么?

[/Quote]

如果要用foreach遍历容器类,那就一定要实现IEnumerater,这样lz就能理解迭代了吧 哈哈
vrhero 2009-12-10
  • 打赏
  • 举报
回复
迭代是数学名词,和中文英文没什么关系...

很多人不懂说明很多人数学基础差,认真上过理工大学一年级的都应该懂,其实很多认真学习的高中生都懂,现在的中学奥数都有教...去补习一下线性代数...

MSDN和CSDN都不是学校,不负责基础教育...
Jave.Lin 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 vrhero 的回复:]
引用 11 楼 linjf520 的回复:
恩,这么说:
IEnumerable、IEnumerable <T>、ICollection都用于定长的。即:你所说的静态数组。
IList、ArrayList、List <T>都是非定长的。即:你所说的动态数组(我觉得就是链表)

乱理解,整个一团浆糊...为什么不去看MSDN?

IEnumerable表明对象是不确定类型的集合并支持简单迭代,是不是定长根本不关心...

IEnumerable <T>表明对象是指定类型的集合并支持简单迭代,是不是定长根本不关心...

ICollection是IEnumerable接口的派生接口,表明对象是不确定类型的集合并支持简单迭代,而且定义了集合的大小、枚举数和同步方法,这里的大小是指可以是定长的也可以是不定长的...

IList是ICollection和IEnumerable的派生接口,表明对象是不确定类型的集合并支持简单迭代,而且定义了集合的大小、枚举数和同步方法,还可以按照索引单独访问,这里的大小是指可以是定长的也可以是不定长的...

ArrayList类是IList接口的实现,表明对象是不确定类型的大小可按需动态增加的数组...

List <T>类是IList <T>接口的实现,是ArrayList类的泛型等效类并增强了功能,表明对象是可通过索引访问的对象的强类型列表...在.NET 2.0以上可以完全代替ArrayList,就是说ArrayList已经被淘汰...

而动态数组和链表在本质上是不同的...在.NET 2.0以上有双向链表LinkedList <T>泛型类,它也是继承自ICollection <T>,IEnumerable <T>,ICollection,IEnumerable...
[/Quote]

迭代:我中文上不很懂。就别说我,很多人也没有真正可以用中英,描述:迭代是什么意思。

词典里也只能查到:迭代器,之类的东西。或是迭代周期之类的。

技术上你说得很不错。

顺便说一句:

要是MSDN 这么好理解好学习。

那CSDN 的存在是为了什么?
vrhero 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 linjf520 的回复:]
恩,这么说:
IEnumerable、IEnumerable<T>、ICollection都用于定长的。即:你所说的静态数组。
IList、ArrayList、List <T>都是非定长的。即:你所说的动态数组(我觉得就是链表)
[/Quote]
乱理解,整个一团浆糊...为什么不去看MSDN?

IEnumerable表明对象是不确定类型的集合并支持简单迭代,是不是定长根本不关心...

IEnumerable<T>表明对象是指定类型的集合并支持简单迭代,是不是定长根本不关心...

ICollection是IEnumerable接口的派生接口,表明对象是不确定类型的集合并支持简单迭代,而且定义了集合的大小、枚举数和同步方法,这里的大小是指可以是定长的也可以是不定长的...

IList是ICollection和IEnumerable的派生接口,表明对象是不确定类型的集合并支持简单迭代,而且定义了集合的大小、枚举数和同步方法,还可以按照索引单独访问,这里的大小是指可以是定长的也可以是不定长的...

ArrayList类是IList接口的实现,表明对象是不确定类型的大小可按需动态增加的数组...

List<T>类是IList<T>接口的实现,是ArrayList类的泛型等效类并增强了功能,表明对象是可通过索引访问的对象的强类型列表...在.NET 2.0以上可以完全代替ArrayList,就是说ArrayList已经被淘汰...

而动态数组和链表在本质上是不同的...在.NET 2.0以上有双向链表LinkedList<T>泛型类,它也是继承自ICollection<T>,IEnumerable<T>,ICollection,IEnumerable...
加载更多回复(11)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧