为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
蓝山帝景 2019-11-12 14:42:15
IEnumerable和之间有什么区别Array?IList和之间有什么区别List?这些似乎具有相同的功能。
查看完整描述

3 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

IEnumerable仅提供最少的“可迭代”功能。您可以遍历该序列,仅此而已。这有缺点-例如,使用IEnumerable计数元素或获取第n个元素效率很低-但它也有优点-例如,IEnumerable可以是无穷的序列,例如质数序列。

数组是一个固定大小的集合,具有随机访问权限(即,您可以对其进行索引)。

List是一个具有随机访问权限的可变大小的集合(即,您可以添加和删除元素)。

IList是一个接口,用于从各种具体类(例如List,BindingList,ObservableCollection等)中抽象出列表功能(计数,添加,删除,索引器访问)。


查看完整回答
反对 回复 2019-11-12
?
波斯汪

TA贡献1811条经验 获得超4个赞

IEnumerable是一个接口,它允许通过一组项进行迭代(例如,通过foreach关键字)。

数组是.NET固有的。它容纳相同类型的项目,但是大小固定。创建具有x个元素的数组后,它就无法增长或收缩。

IList定义列表的接口,并实现IEnumerable。

List实现IList接口;这是列表的具体类型。

.NET列表和数组之间的区别在于列表可以添加元素-它们增长到足以容纳所有必需项的大小。列表将其内部存储在一个数组中,当该数组的大小不再足以容纳所有元素时,将创建一个新的数组并复制项目。

IList和数组都实现IEnumerable。接口就是这样工作的-类实现协定并以相似的方式运行,因此可以类似地被对待(您知道该类实现IEnumerable,您无需知道操作方式或原因)。我建议您阅读接口等内容。


查看完整回答
反对 回复 2019-11-12
?
慕后森

TA贡献1802条经验 获得超5个赞

IEnumerable集合的生成很懒。例:


public IEnumerable<int> GetTwoInts()

{

  yield return 1;

  yield return 2;

}

public void Something()

{

  var twoInts = GetTwoInts();

}

在方法Something中,对GetTwoInts()的调用实际上不会导致方法GetTwoInts被执行,因为枚举从未被迭代过。


查看完整回答
反对 回复 2019-11-12
  • 3 回答
  • 0 关注
  • 1078 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信