gpt4 book ai didi

c# - yield 关键字的奇迹

转载 作者:太空狗 更新时间:2023-10-29 20:50:51 24 4
gpt4 key购买 nike

好的,当我四处探索构建自定义枚举器时,我注意到了这种与产量

有关的行为

假设你有这样的事情:

  public class EnumeratorExample 
{

public static IEnumerable<int> GetSource(int startPoint)
{
int[] values = new int[]{1,2,3,4,5,6,7};
Contract.Invariant(startPoint < values.Length);
bool keepSearching = true;
int index = startPoint;

while(keepSearching)
{
yield return values[index];
//The mind reels here
index ++
keepSearching = index < values.Length;
}
}

}

在技术上从函数返回后,是什么使得在编译器的引擎盖下执行索引++ 和 while 循环中的其余代码成为可能?

最佳答案

编译器将代码重写到状态机中。您编写的单个方法被分成不同的部分。每次您调用 MoveNext(隐式或显式)时,状态都会提前并执行正确的代码块。

如果您想了解更多详细信息,建议阅读:

关于c# - yield 关键字的奇迹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4455796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com