首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数字效益

数字效益
EN

Stack Overflow用户
提问于 2016-12-22 11:54:53
回答 3查看 1.3K关注 0票数 2

我很难理解IEnumerable的好处。我理解Enumerables允许执行推迟到以后。

请参见这里的示例:https://msdn.microsoft.com/en-us/library/system.collections.ienumerable(v=vs.110).aspx。在本例中,数组已经填充在主类中,然后注入到IEnumerable类中。因此,这似乎消除了将执行推迟到以后的优点。我在这里错过了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-22 11:57:39

您所引用的文档只是一个如何实现它的文档,而不是最有效的方法。当然,所显示的实现根本没有任何用处,因为正如您所说的,数组本身已经构建并可枚举。

通过实现IEnumerable,该示例最多可以显示自定义类型如何像集合一样工作。当然,这个非常通用的接口可以从不同的地方调用,在这些地方您不需要关于集合类型的特定知识,但在示例中没有显示出来。

枚举器用于从开始到结束对一组数据进行迭代。您不能将前一项读取回来,因为它可能已经被丢弃(例如,需要从远程位置下载非常大的文件的迭代器,您可能不想缓存它们)。

票数 2
EN

Stack Overflow用户

发布于 2016-12-22 12:14:59

IEnumerable的一个例子是延迟执行。

我认为使用IEnumerable的最大优势是:

  1. 您可以迭代一个集合,而不知道如何迭代它(集合有索引器吗?)我应该如何迭代一棵树?等等)。
  2. 您可以迭代集合的一部分--考虑寻找满足条件的第一个元素。
  3. 延迟执行--您可以过滤集合,真正的过滤将在遍历IEnumerable (使用ForEach\ToList等)时立即进行。
票数 1
EN

Stack Overflow用户

发布于 2016-12-22 12:07:04

是否推迟评估是一种设计选择,但不是IEnumerable的强制要求。有些Linq输出查询(比如Where & Select)推迟了评估,而另一些集合,如Dictionary或List则没有。

当您从集合中需要的唯一信息是能够“枚举”元素时,您应该使用IEnumerable。

假设您希望为泛型集合实现一个ToString方法,其中对象有自己的ToString。如果您接受的是IEnumerable而不是数组,则可以将列表或集合作为参数传递,而无需进行任何代码更改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41282631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档