在C#中使用IEnumerable over List

using IEnumerable over List in C#

本问题已经有最佳答案,请猛点这里访问。

使用IEnumerable over list有什么好处?例如,我有一个Employee类和一个Employee对象集合,如果我想迭代每个Employee,我可以使用:

1
2
3
4
5
List<Employee> employees = new List<Employee>() { new Employee(...),...}
foreach (Employee emp in employees)
{
   Console.WriteLine(emp.Name);
}

或者我可以使用IEnumerable作为:

1
IEnumerable<Employee> employees = new List<Employee>() { new Employee(...),...}

然后使用foreach循环。

它们都实现了相同的目标,所以为什么我们有时更喜欢使用IEnumerable而不是List?


List是一个更复杂的结构,它允许通过索引访问值,并支持方法insert、add、remove和其他方法。IEnumerable也是List类实现的一个非常基本的接口(尽管实现前几次可能很困难)。也就是说,当您不需要列表提供的附加项时,将使用IEnumerable。否则,由于列表与IEnumerable具有"is a"关系,因此您可以使用它,这是由于C提供的反向规则。以下是一些相关文档:

https://msdn.microsoft.com/en-us/library/dd799517.aspx

还有关于IEnumerable的实现:

https://msdn.microsoft.com/en-us/library/system.collections.ienumerable(v=vs.110).aspx

总之,如果您只需要使用一个简单的迭代器(如foreach循环)来循环生成的IEnumerable,或者使用Linq,那么IEnumerable类型就非常轻量。如果您需要比列表更多的功能,那么列表将建立在IEnumerable所需要的功能之上,因为它是一个IEnumerable,然后是一些。