gpt4 book ai didi

c# - 需要帮助理解 IEnumerable 中的 C# yield

转载 作者:太空狗 更新时间:2023-10-30 00:17:10 25 4
gpt4 key购买 nike

我正在阅读 C# 2010 Accelerated。我不明白什么是 yield

When GetEnumerator is called, the code in the method that contains the yield statement is not actually executed at that point in time. Instead, the compiler generates an enumerator class, and that class contains the yield block code

public IEnumerator<T> GetEnumerator() { 
foreach( T item in items ) {
yield return item;
}
}

我还阅读了 Some help understanding “yield”

yield is a lazy producer of data, only producing another item after the first has been retrieved, whereas returning a list will return everything in one go.

这是否意味着每次调用 GetEnumerator 都会从集合中获取 1 项?所以第一个电话我得到第一个项目,第二个电话,我得到第二个等等......?

最佳答案

最好的思考方式是当您第一次从 IEnumerator 请求一个项目时(例如在 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";
}

关于c# - 需要帮助理解 IEnumerable 中的 C# yield,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3458142/

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