IEnumerable <T>的作用是什么?我为什么要使用它?

Dee*_*Nag 13 c# collections ienumerable

IEnumerable<T>什么时候可以使用...我说List<T>什么?前者优于后者有什么优势?

Ree*_*sey 31

IEnumerable<T>是一个接口告诉我们,我们可以枚举一系列T实例.如果您需要允许某人查看并对集合中的每个对象执行某些操作,这就足够了.

List<T>另一方面,是以IEnumerable<T>特定的已知方式存储对象的特定实现.在内部,这可能是一种非常好的方式来存储您通过公开的值IEnumerable<T>,但是List<T>并不总是合适的.例如,如果您不需要按索引访问项目,但不断在集合的开头插入项目,然后从最后删除项目,Queue<T>则更适合使用.

通过IEnumerable<T>在API中使用,您可以随时灵活地更改内部实现,而无需更改任何其他代码.这在使您的代码具有灵活性和可维护性方面具有巨大优势.

  • 我强烈赞同你关于脱离实现的观点,但我也认为有必要明确预期的用法; 即使我有一个List <T>,将其称为IEnumerable <T>清楚地表明我在该用法中期望从集合中获得的功能是可枚举功能,而不是任何其他List功能.它有效地用作意图文档; 我发现那些明确的意图文件倾向于提供你指出的脱钩. (2认同)
  • @Paul:我同意,虽然在这种情况下我会建议`IList <T>`与`IEnumerable <T>`,**不是**`List <T>`. (2认同)

zim*_*m32 0

IEnumerable 为您提供了实现自己的存储和迭代对象集合逻辑的方法