仍在尝试找到在实际情况下我会在哪里使用“yield”关键字。
我看到这个主题的帖子
C#中的yield关键字有什么用? https://stackoverflow.com/questions/39476/what-is-the-yield-keyword-used-for-in-c
但在接受的答案中,他们以此为例,其中有人正在迭代 Integers()
public IEnumerable<int> Integers()
{
yield return 1;
yield return 2;
yield return 4;
yield return 8;
yield return 16;
yield return 16777216;
}
但为什么不直接使用
list<int>
改为这里。看起来更简单..
如果您构建并返回一个 List(假设它有 100 万个元素),那么这将占用很大的内存,并且创建它也需要大量工作。
有时调用者可能只想知道第一个元素是什么。或者他们可能想在获取它们时将它们写入文件,而不是在内存中构建整个列表,然后将其写入文件。
这就是为什么使用收益率更有意义。它看起来与构建整个列表并返回它没有什么不同,但它非常不同,因为在调用者可以查看其中的第一项之前,不必在内存中创建整个列表。
当来电者说:
foreach (int i in Integers())
{
// do something with i
}
每次循环需要一个新的 i 时,它都会在 Integers() 中运行更多的代码。当该函数中的代码命中时,它会“暂停”yield return
陈述。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)