【问题标题】:What should I use an IEnumerable or IList? [duplicate]我应该使用什么 IEnumerable 或 IList? [复制]
【发布时间】:2010-07-12 12:58:29
【问题描述】:

谁能告诉我什么时候应该使用。

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

谢谢。

【问题讨论】:

    标签: c# ienumerable ilist


    【解决方案1】:

    一般来说,您应该尝试使用适合您目的的最不具体的类型。 IEnumerable 不如 IList 特定(IList 实现 IEnumerable)所以除非你想从 IList 得到特定的东西(如你建议的 Count,或者可能是 AddDelete 等),我会使用IEnumerable

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

    【讨论】:

    • 我同意使用最小派生类型。 ICollection 对于大多数添加/删除来说已经足够了。
    • @Mark H - 好点 - 对于大多数添加/删除操作,即使是 IList 也是不必要的。
    • 是的:IList 确实实现了 IEnumerble:msdn.microsoft.com/en-us/library/system.collections.ilist.aspx。毕竟,列表是可以迭代的事物的可枚举集合。
    • 我认为最终,这实际上取决于您想为您的班级消费者提供哪些功能/方法。说我们应该尽量使用最不具体的类型至少是不准确的。人们会问:既然对象是派生最少的类型,为什么我们不一直使用对象呢?
    • 你误解了我的观点。我并不是建议您总是使用派生最少的类型“句号”。您使用最不具体的类型适合您的目的并具有您需要的方法和属性。因此,例如,如果您所做的只是通过 GetType 访问对象上的类型,那么 system.object 将是一个不错的选择,但如果您希望它是一个项目列表,那就不好了。如果您期望一个项目列表但只想枚举它们,则 IEnumerable 将是一个更好的选择,但如果您想添加到列表中就不好了,在这种情况下 IList 是更好的选择。
    【解决方案2】:

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

    IList 是当您想要添加、删除和访问乱序的列表内容时。

    IList vs IEnumerable for Collections on Entities

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

    【讨论】:

    • 我对这个答案有疑问。您希望在多次迭代集合时使用 IList。否则你会得到多个不必要的枚举
    【解决方案3】:

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

    一个非常简单的答案,如果你能描述你的场景,我可以扩展它。

    【讨论】:

      猜你喜欢
      • 2013-09-16
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多