C# 列表、IList和IEnumerable之间的比较
我有一个C#应用程序,在其中我处理一些集合类型。我需要知道这些类型之间的区别: 与其他产品相比,每种产品的区别是什么C# 列表、IList和IEnumerable之间的比较,c#,.net,C#,.net,我有一个C#应用程序,在其中我处理一些集合类型。我需要知道这些类型之间的区别: 与其他产品相比,每种产品的区别是什么 IEnumerable是下面扩展或实现的基本接口。它不允许直接访问,并且是只读的。因此,仅当您打算迭代集合时才使用此选项 ICollection扩展了IEnumerable,但还允许添加、删除、测试集合中是否存在元素以及获取元素总数。它不允许通过索引直接访问元素。这将是一个O(n)操作,因为您需要开始对其进行迭代,直到找到相应的元素 IList扩展了ICollection
是下面扩展或实现的基本接口。它不允许直接访问,并且是只读的。因此,仅当您打算迭代集合时才使用此选项IEnumerable
扩展了ICollection
,但还允许添加、删除、测试集合中是否存在元素以及获取元素总数。它不允许通过索引直接访问元素。这将是一个O(n)操作,因为您需要开始对其进行迭代,直到找到相应的元素IEnumerable
扩展了IList
(因此它继承了它的所有属性),但还允许通过索引直接访问元素。这是一个O(1)操作ICollection
只是List
接口的一个具体实现IList
IEnumerable
。如果他们需要通过索引直接访问元素,则公开一个IList
List
只能由代码内部使用,但通常不会出现在您公开的方法的签名中。这为您提供了更大的灵活性,因为您可以轻松地交换具体的实现,而不会违反合同。IList
IList存在于System.Collections命名空间中
IList用于访问列表中特定位置/索引中的元素
与IEnumerable一样,IList也最适合从内存集合(如列表、数组等)中查询数据
当您要从列表中添加或删除项目时,IList非常有用
IList可以在不迭代集合的情况下找出集合中的元素数
IList支持延迟执行
IList不支持进一步筛选
IEnumerable
System.Collections命名空间中存在IEnumerable
IEnumerable是一个仅向前的集合,它不能在项之间向后移动
IEnumerable最适合从内存集合(如列表、数组等)中查询数据
IEnumerable不支持从列表中添加或删除项
使用Ienumerable,我们可以在迭代集合后找出集合中的元素数
IEnumerable支持延迟执行
IEnumerable支持进一步筛选。谢谢,很清楚。对于响应时间,当我尝试查找元素或对集合进行排序时,它们中最好的是什么?使用LINQ,您可以通过
IEnumerable
实现这一点。这是一个很好的资源,Hashset在哪里合适?@Evonet:Hashset
实现了ISet
,它实现了ICollection
@DarinDimitrov:ICollection不允许添加或删除。