在阅读IEnumerable接口时,我遇到了这两个代码片段。我想用简单的术语来理解它们之间的确切区别。
代码段1:没有收益,
public IEnumerator GetEnumerator()
{
// Return the array object's IEnumerator.
return carArray.GetEnumerator();
}
代码段2:收益率,
public IEnumerator GetEnumerator()
{
foreach (Car c in carArray)
{
yield return c;
}
}
两个片段都做同样的工作,那么在这里使用YIELD有什么特别之处呢?
提前致谢:)
答案 0 :(得分:1)
yield return将有状态顺序代码转换为迭代器。
与第一个示例中一样,您可以迭代代码并返回"您访问时的每个值。这不是一个传统的回报,它的产量更多的是上下文切换到调用你的代码。下一次迭代将恢复你。
答案 1 :(得分:1)
关于yield
的本质是它将实际执行推迟到真正查询该值的时间。换句话说,不是在您要求枚举器时评估特定值,而是在检索值时进行评估(延迟评估)。
这有很多含义:
答案 2 :(得分:0)
yield return
是一个语法糖,可以控制回调用函数。它提供了优化机会,因此如果您知道要在集合中查找某个值,则无需将整个集合返回给调用者,一旦获得所需内容,就可以将枚举短路。
那怎么做呢? yield return
变为switch语句,如下所述:http://startbigthinksmall.wordpress.com/2008/06/09/behind-the-scenes-of-the-c-yield-keyword/
有一个非常好的视频也在这里解释:https://www.youtube.com/watch?v=Or9g8LOhXhg