我应该使用IEnumerable或IList?

Ser*_*pia 48 c# ienumerable ilist

任何人都可以告诉我何时应该使用它们.

例如,我想当我想访问集合的.Count或单个项目时,我应该使用IList,对吗?

谢谢.

Rob*_*ine 73

一般来说,您应该尝试使用适合您目的的最不具体的类型.IEnumerable是小于特定的IList(IList工具IEnumerable),所以,除非你想从具体的东西IList(比如Count你的建议,或许Add,Delete等),我会使用IEnumerable.

剩下的一个好处IEnumerable是你可以编写迭代器方法来返回这个类型(查看"yield return"和迭代器方法,如果你不熟悉它们).这允许您为循环编写非常节省内存的"管道".

  • 你误解了我的想法.我并不是说你总是使用最少的派生类型"完全停止".您使用最适合您目的的特定类型*并具有您需要的方法和属性.因此,例如,如果您所做的只是通过GetType访问对象上的类型,那么system.object将是一个不错的选择,但是如果您希望它是一个项列表则没有用.如果你期望一个项目列表但只想枚举它们,IEnumerable将是一个更好的选择,但如果你想添加到列表中没有好处,在这种情况下IList是更好的选择. (6认同)
  • 我同意使用最少派生类型.ICollection <>足以进行大多数添加/删除. (3认同)

kem*_*002 23

当您想要遍历集合中的项目时,可以使用IEnumerable.

IList是您想要无序添加,删除和访问列表内容的时间.

IList vs IEnumerable实体集合

http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=722

  • 我对这个答案有疑问。您希望在多次迭代集合时使用 IList。否则你最终会得到多个不必要的枚举 (2认同)

Res*_*uta 8

当你需要通过索引访问集合,添加和删除元素等时,你应该使用IList,当你需要枚举你的集合时,你应该使用IEnumerable.

一个非常简单的答案,如果您将描述您的情景,我可以扩展它.