我很难理解IEnumerable的好处。我理解Enumerables允许执行推迟到以后。
请参见这里的示例:https://msdn.microsoft.com/en-us/library/system.collections.ienumerable(v=vs.110).aspx。在本例中,数组已经填充在主类中,然后注入到IEnumerable类中。因此,这似乎消除了将执行推迟到以后的优点。我在这里错过了什么?
发布于 2016-12-22 11:57:39
您所引用的文档只是一个如何实现它的文档,而不是最有效的方法。当然,所显示的实现根本没有任何用处,因为正如您所说的,数组本身已经构建并可枚举。
通过实现IEnumerable,该示例最多可以显示自定义类型如何像集合一样工作。当然,这个非常通用的接口可以从不同的地方调用,在这些地方您不需要关于集合类型的特定知识,但在示例中没有显示出来。
枚举器用于从开始到结束对一组数据进行迭代。您不能将前一项读取回来,因为它可能已经被丢弃(例如,需要从远程位置下载非常大的文件的迭代器,您可能不想缓存它们)。
发布于 2016-12-22 12:14:59
IEnumerable的一个例子是延迟执行。
我认为使用IEnumerable的最大优势是:
发布于 2016-12-22 12:07:04
是否推迟评估是一种设计选择,但不是IEnumerable的强制要求。有些Linq输出查询(比如Where & Select)推迟了评估,而另一些集合,如Dictionary或List则没有。
当您从集合中需要的唯一信息是能够“枚举”元素时,您应该使用IEnumerable。
假设您希望为泛型集合实现一个ToString方法,其中对象有自己的ToString。如果您接受的是IEnumerable而不是数组,则可以将列表或集合作为参数传递,而无需进行任何代码更改。
https://stackoverflow.com/questions/41282631
复制相似问题