IEnumerable和Array,IList和List有什么区别?

IEnumerable和之间有什么区别Array

IList和之间有什么区别List

这些似乎具有相同的功能。


蓝山帝景
浏览 1081回答 3
3回答

慕尼黑5688855

IEnumerable仅提供最少的“可迭代”功能。您可以遍历该序列,仅此而已。这有缺点-例如,使用IEnumerable计数元素或获取第n个元素效率很低-但它也有优点-例如,IEnumerable可以是无穷的序列,例如质数序列。数组是一个固定大小的集合,具有随机访问权限(即,您可以对其进行索引)。List是一个具有随机访问权限的可变大小的集合(即,您可以添加和删除元素)。IList是一个接口,用于从各种具体类(例如List,BindingList,ObservableCollection等)中抽象出列表功能(计数,添加,删除,索引器访问)。

波斯汪

IEnumerable是一个接口,它允许通过一组项进行迭代(例如,通过foreach关键字)。数组是.NET固有的。它容纳相同类型的项目,但是大小固定。创建具有x个元素的数组后,它就无法增长或收缩。IList定义列表的接口,并实现IEnumerable。List实现IList接口;这是列表的具体类型。.NET列表和数组之间的区别在于列表可以添加元素-它们增长到足以容纳所有必需项的大小。列表将其内部存储在一个数组中,当该数组的大小不再足以容纳所有元素时,将创建一个新的数组并复制项目。IList和数组都实现IEnumerable。接口就是这样工作的-类实现协定并以相似的方式运行,因此可以类似地被对待(您知道该类实现IEnumerable,您无需知道操作方式或原因)。我建议您阅读接口等内容。

慕后森

IEnumerable集合的生成很懒。例:public IEnumerable<int> GetTwoInts(){&nbsp; yield return 1;&nbsp; yield return 2;}public void Something(){&nbsp; var twoInts = GetTwoInts();}在方法Something中,对GetTwoInts()的调用实际上不会导致方法GetTwoInts被执行,因为枚举从未被迭代过。
打开App,查看更多内容
随时随地看视频慕课网APP