List<string> 和 IEnumerable<string> 有什么区别

iro*_*man 5 c#

这两个人似乎正在做同样的事情。我给它们计时了——知道这只是一个小例子——但它们似乎也以完全相同的速度运行。使用其中一种比另一种有好处吗?

List<string> alpha = new List<string>(new string[] { "a", "b", "c" });
foreach (var letter in alpha)
{
    Console.WriteLine(letter);
}

IEnumerable<string> _alpha = new[] {"a", "b", "c"};
foreach(var _letter in _alpha)
{
     Console.WriteLine(_letter);
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*rie 1

它们是不同类型的对象,IEnumerable是接口(不是实例本身,只是某些功能的模式),而是List实际的类。

使用其中一种比另一种有某种“优势”。

如果您正在编写一个想要更灵活的方法,并且只需要枚举对象,那么请使用IEnumerable.

List实现IEnumerable,并且可以像这样对待,就像Collection,和许多其他类一样。

以此为例:

public void OutputEnumerable(IEnumerable<string> strings)
{
    foreach (string s in strings)
        Console.WriteLine(s);
}

public void OutputList(List<string> strings)
{
    foreach (string s in strings)
        Console.WriteLine(s);
}
Run Code Online (Sandbox Code Playgroud)

然后你就有了这些数据:

List<string> stringList = new List<string>(new [] { "a", "b", "c" });
Collection<string> stringCol = new Collection<string>(new [] { "a", "b", "c" });
IEnumerable<string> stringEn = new [] { "a", "b", "c" };
Run Code Online (Sandbox Code Playgroud)

这些都有效:

OutputEnumerable(stringList);
OutputEnumerable(stringCol);
OutputEnumerable(stringEn);
OutputList(stringList);
Run Code Online (Sandbox Code Playgroud)

而这些并没有:

OutputList(stringCol);
OutputList(stringEn);
Run Code Online (Sandbox Code Playgroud)