List,IList和IEnumerable之间的比较

Lam*_*fif 36 .net c#

我有一个C#应用程序,我在其中处理一些集合类型.我需要知道这些类型之间的区别:

  1. List
  2. IList
  3. IEnumerable

与其他人相比,每个人的优势是什么?

Dar*_*rov 82

  • IEnumerable<T>是以下扩展或实现的基本接口.它不允许直接访问,只读.因此,只有在您打算迭代集合时才使用它.

  • ICollection<T>扩展IEnumerable<T>但另外允许添加,删除,测试集合中是否存在元素并获取元素的总数.它不允许通过索引直接访问元素.这将是一个O(n)操作,因为您需要开始迭代它,直到找到相应的元素.

  • IList<T>extends ICollection<T>(因此它继承了它的所有属性),但另外允许通过索引直接访问元素.这是O(1)操作.

  • List<T>只是IList<T>界面的具体实现.

在您的代码中,您应始终公开对象层次结构中最高的类型,该类型将与调用者的需求相对应.因此,例如,如果调用者只是枚举数据集,请使用IEnumerable<T>.如果他们需要通过索引直接访问元素IList<T>.

List<T>应仅在您的代码内部使用,但通常不会出现在您公开的方法的签名中.这为您提供了更大的灵活性,因为您可以轻松交换具体实施而不会违反合同.

  • 使用LINQ,您可以使用`IEnumerable <T>`实现. (5认同)