static void Main(string[] args)
{
List<int> li = new List<int>() { 1, 20, 30, 4, 5 };
GetNosLessThan5(li);
}
public static IEnumerable<int> GetNosLessThan5(List<int> numbers)
{
foreach (var v in numbers)
{
if (v < 5)
yield return v;
}
}
我在void main的开头放置了一个调试点。当我连续按f11键时,黄色箭头仅覆盖主要功能块,并且调试终止。它根本无法达到“ getnoslessthan5”功能。
您永远不会真正遍历结果,因此GetNosLessThan5
永远不会执行该函数的实际主体。编译器在后台创建了一个迭代器,但实际上需要枚举该迭代器才能运行函数体。
迭代器可用于单步执行列表和数组之类的集合。
迭代器方法或get访问器对集合执行自定义迭代。迭代器方法使用Yield(Visual Basic)或yield return(C#)语句一次返回每个元素。当达到Yield或yield return语句时,将记住代码中的当前位置。下次调用迭代器函数时,将从该位置重新开始执行。
您可以通过使用For Each…Next(Visual Basic)或foreach(C#)语句或使用LINQ查询来从客户端代码中使用迭代器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句