3 回答
TA贡献1848条经验 获得超2个赞
IEnumerable仅提供最少的“可迭代”功能。您可以遍历该序列,仅此而已。这有缺点-例如,使用IEnumerable计数元素或获取第n个元素效率很低-但它也有优点-例如,IEnumerable可以是无穷的序列,例如质数序列。
数组是一个固定大小的集合,具有随机访问权限(即,您可以对其进行索引)。
List是一个具有随机访问权限的可变大小的集合(即,您可以添加和删除元素)。
IList是一个接口,用于从各种具体类(例如List,BindingList,ObservableCollection等)中抽象出列表功能(计数,添加,删除,索引器访问)。
TA贡献1811条经验 获得超4个赞
IEnumerable是一个接口,它允许通过一组项进行迭代(例如,通过foreach关键字)。
数组是.NET固有的。它容纳相同类型的项目,但是大小固定。创建具有x个元素的数组后,它就无法增长或收缩。
IList定义列表的接口,并实现IEnumerable。
List实现IList接口;这是列表的具体类型。
.NET列表和数组之间的区别在于列表可以添加元素-它们增长到足以容纳所有必需项的大小。列表将其内部存储在一个数组中,当该数组的大小不再足以容纳所有元素时,将创建一个新的数组并复制项目。
IList和数组都实现IEnumerable。接口就是这样工作的-类实现协定并以相似的方式运行,因此可以类似地被对待(您知道该类实现IEnumerable,您无需知道操作方式或原因)。我建议您阅读接口等内容。
TA贡献1802条经验 获得超5个赞
IEnumerable集合的生成很懒。例:
public IEnumerable<int> GetTwoInts()
{
yield return 1;
yield return 2;
}
public void Something()
{
var twoInts = GetTwoInts();
}
在方法Something中,对GetTwoInts()的调用实际上不会导致方法GetTwoInts被执行,因为枚举从未被迭代过。
- 3 回答
- 0 关注
- 1122 浏览
添加回答
举报