我正在阅读C#2010 Accelerated.我不知道是什么yield
调用GetEnumerator时,包含yield语句的方法中的代码实际上并未在该时间点执行.相反,编译器生成枚举器类,该类包含yield块代码
public IEnumerator<T> GetEnumerator() {
foreach( T item in items ) {
yield return item;
}
}
Run Code Online (Sandbox Code Playgroud)
我也读了一些帮助理解"产量"
yield是一个懒惰的数据生成器,只在检索到第一个后生成另一个项目,而返回一个列表将一次性返回所有内容.
这是否意味着每次调用GetEnumerator都会从集合中获得1个项目?所以第一个电话我得到第一个项目,第二个,我得到第二个,依此类推......?
想到它的最佳方式是当你第一次请求某个项目时IEnumerator(例如在a中foreach),它开始通过该方法运行,当它点击yield return它时暂停执行并返回该项目供你在你的项目中使用foreach.然后你请求下一个项目,它恢复它离开的代码并重复循环,直到它遇到方法的任何一个yield break或结束.
public IEnumerator<string> enumerateSomeStrings()
{
yield return "one";
yield return "two";
var array = new[] { "three", "four" }
foreach (var item in array)
yield return item;
yield return "five";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
901 次 |
| 最近记录: |