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的开头放置了一个调试点。当我连续按f11时,黄色箭头只覆盖主函数块,调试结束。它从来没有到达"getnoslessthan5“函数在all.Confused.!
发布于 2015-02-02 04:14:08
实际上,您从未对结果进行迭代,因此GetNosLessThan5函数的实际主体从未执行。编译器在引擎盖下创建一个迭代器,但是需要实际枚举它才能运行函数体。
迭代器可用于遍历集合(如列表和数组)。 迭代器方法或get访问器对集合执行自定义迭代。迭代器方法使用产率(Visual )或屈服返回(C#)语句一次返回每个元素。当到达收益率或屈服返回语句时,将记住代码中的当前位置。下次调用迭代器函数时,将从该位置重新启动执行。 通过为每个…使用一个迭代器,您可以使用客户机代码中的迭代器。Next (Visual )或foreach (C#)语句或使用LINQ查询。
https://stackoverflow.com/questions/28271001
复制相似问题