在 C# 中的列表上使用 IEnumerable [重复]
Posted
技术标签:
【中文标题】在 C# 中的列表上使用 IEnumerable [重复]【英文标题】:using IEnumerable over List in C# [duplicate] 【发布时间】:2017-01-21 23:28:41 【问题描述】:使用 IEnumerable 比使用 List 有什么优势?例如,我有一个 Employee 类和一个员工对象的集合,如果我想迭代每个员工,我可以使用:
List<Employee> employees = new List<Employee>() new Employee(...),...
foreach (Employee emp in employees)
Console.WriteLine(emp.Name);
或者我可以将 Ienumerable 用作:
IEnumerable<Employee> employees = new List<Employee>() new Employee(...),...
然后使用 foreach 循环。
它们都实现了相同的目标,那么为什么我们有时更喜欢使用 IEnumerable 而不是 List?
【问题讨论】:
【参考方案1】:List是一种更复杂的结构,可以通过索引访问值,支持insert、add、remove等方法。 IEnumerable 是 List 类也实现的一个非常基本的接口(尽管前几次实现可能会很棘手)。也就是说,当您不需要 List 提供的附加功能时,可以使用 IEnumerable。否则,由于 List 与 IEnumerable 具有“是”关系,由于 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,然后是一些。
【讨论】:
以上是关于在 C# 中的列表上使用 IEnumerable [重复]的主要内容,如果未能解决你的问题,请参考以下文章
IEnumerable<T> 使用 c# 在函数内访问 T 的属性
使用 OrderByDescending 每一步返回 IEnumerable<T> 列表集合中的最大值