理解C#的yield
关键字实现高效迭代
C# 2.0 中引入的 yield
关键字显着简化了命令式迭代。 考虑这个例子,说明它在创建 IEnumerable<T>
:
<code class="language-csharp">IEnumerable<object> FilteredList() { foreach(object item in FullList) { if(IsItemInPartialList(item)) yield return item; } }</code>
此函数不会在内存中构建完整的列表。相反,它返回一个迭代器。每次调用代码中的 foreach
循环请求下一个项目时,FilteredList()
函数都会从中断处恢复执行,评估下一个 item
并仅在满足条件时才返回它。
让我们看一个更简单的例子:
<code class="language-csharp">public void Consumer() { foreach(int i in Integers()) { Console.WriteLine(i); } } public IEnumerable<int> Integers() { yield return 1; yield return 2; yield return 4; yield return 8; yield return 16; yield return 16777216; }</code>
调试这段代码发现Integers()
并没有立即完全执行。 它仅执行直到遇到 yield return
,返回单个值。 foreach
中 Consumer()
循环的下一次迭代导致 Integers()
恢复,从下一个 yield return
继续。
使用yield
的主要好处:
IEnumerable
和IEnumerator
,从而产生更干净、更简洁的代码。以上是c#'产量”关键字如何简化命令式迭代?的详细内容。更多信息请关注PHP中文网其他相关文章!