2013-07-03 82 views
34

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

的人谁总是使用了列表和从未使用过的IEnumerable:

  • 是什么两者之间的实际差别?
  • 在哪些情况下,其中一个比另一个好?

这里是一个实际的例子: 我们想要存储四根弦,字母顺序排序它们,将它们传递给另一个函数,然后显示给用户的结果。我们会用什么,为什么?

希望有人可以为我解决这个问题,或指出我在正确的方向。 在此先感谢!

+2

“List”不是“IEnumerable”类型,它实现了IEnumerable设置的合约(即它可以用作IEnumerable)。如果你想存储字符串,你会使用一个列表。你不能使用一个枚举,因为这不是一个类。如果你愿意,你可以作为一个枚举来访问这个列表。 –

+6

这不应该被标记为重复的问题。另一个问题在使用LINQ时谈到IEnumberable vs List。这个问题不是关于LINQ的。 – JMS10

回答

114

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

因此,如果您需要对您的收藏进行任何形式的永久性更改(添加&删除),您需要列表。如果您只需要阅读,排序和/或筛选您的集合,那么IEnumerable就足够了。

所以在你的实际例子中,如果你想一次添加四个字符串,你需要List。但是如果你一次实例化你的集合,你可以使用IEnumerable。

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

然后,您可以使用LINQ来过滤或排序列表,但是你想要的。

+22

“IEnumerable是只读的,List不是。”最后一个具体的答案,实际上给你一个普遍的想法。非常感谢你:) – Robin

+1

完美!好&简单的答案 –

+1

还有一些你可以用IEnumerable做的其他很酷的事情,你不能用List做。查看yield关键字。 https://www.kenneth-truyers.net/2016/05/12/yield-return-in-c/ – Kevin

10

除List以外的许多类型都实现了IEnumerable,如ArrayList。所以一个好处是你可以将不同的集合类型传递给同一个函数。

相关问题