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时,黄色箭头仅覆盖主功能块,调试终止。它永远不会到达&#34; getnoslessthan5&#34;功能完全。被困。!
答案 0 :(得分:5)
你永远不会实际迭代结果,因此永远不会执行GetNosLessThan5
函数的实际主体。编译器会在底层创建一个迭代器,但实际上需要枚举它才能使函数体运行。
请参阅MSDN Documentation about Iterators。
迭代器可用于逐步执行列表和数组之类的集合。
迭代器方法或get访问器对集合执行自定义迭代。迭代器方法使用Yield(Visual Basic)或yield return(C#)语句一次返回一个元素。达到Yield或yield return语句时,将记住代码中的当前位置。下次调用迭代器函数时,将从该位置重新开始执行。
使用For Each ... Next(Visual Basic)或foreach(C#)语句或使用LINQ查询从客户端代码中使用迭代器。