【问题标题】:Practical difference between List and IEnumerable [duplicate]List 和 IEnumerable 之间的实际区别 [重复]
【发布时间】:2013-07-03 13:04:23
【问题描述】:

通过阅读类似的帖子,我了解到 List 是一种 IEnumerable。但我真的很想知道这两者之间的实际区别是什么。

致一直使用 List 而从未使用过 IEnumerable 的人:

  • 两者之间的实际区别是什么?
  • 在什么情况下,其中一种比另一种更好?

这是一个实际示例: 我们想要存储四个字符串,按字母顺序排列,将它们传递给另一个函数,然后向用户显示结果。我们将使用什么以及为什么?

希望有人可以为我解决这个问题或为我指明正确的方向。 提前致谢!

【问题讨论】:

  • A List 不是IEnumerable 的类型,它履行了IEnumerable 规定的合同(即它可以用作IEnumerable)。如果你想存储字符串,你会使用一个列表。您不能使用可枚举,因为它不是一个类。如果需要,您可以将列表作为可枚举访问。
  • 这不应被标记为重复的问题。另一个问题是关于使用 LINQ 时的 IEnumberable 与 List。这个问题与 LINQ 无关。
  • List 允许随机访问,但 IEnumerable 不允许

标签: c# .net list ienumerable


【解决方案1】:

IEnumerable 和 List 之间的一个重要区别(除了一个是接口,另一个是具体类之外)是 IEnumerable 是只读的,而 List 不是。

因此,如果您需要对您的收藏进行任何类型的永久更改(添加和删除),您将需要 List。如果您只需要读取、排序和/或过滤您的集合,IEnumerable 就足够了。

因此,在您的实际示例中,如果您想一次添加四个字符串,则需要 List。但是,如果您要一次全部实例化您的集合,则可以使用 IEnumerable。

IEnumerable firstFourLettersOfAlphabet = new[]{"a","b","c","d"};

然后,您可以使用 LINQ 对列表进行过滤或排序。

【讨论】:

【解决方案2】:

List<T> 以外的许多类型都实现了IEnumerable,例如ArrayList。所以一个优点是你可以将不同的集合类型传递给同一个函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 2015-07-01
    • 2013-07-11
    • 2014-06-27
    • 2011-06-25
    • 2020-10-10
    • 1970-01-01
    相关资源
    最近更新 更多