cal*_*ser 2 c# visual-studio-2010 visual-studio-debugging
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我在void main的开头放了一个调试点.当我连续按f11时,黄色箭头仅覆盖主功能块,调试终止.它根本没有达到"getnoslessthan5"的功能.融合.!
你永远不会实际迭代结果,因此GetNosLessThan5永远不会执行函数的实际主体.编译器在底层创建了一个迭代器,但实际上需要枚举它以使函数体运行.
迭代器可用于逐步执行列表和数组之类的集合.
迭代器方法或get访问器对集合执行自定义迭代.迭代器方法使用Yield(Visual Basic)或yield return(C#)语句一次返回一个元素.达到Yield或yield return语句时,将记住代码中的当前位置.下次调用迭代器函数时,将从该位置重新开始执行.
您可以使用For Each ... Next(Visual Basic)或foreach(C#)语句或使用LINQ查询从客户端代码中使用迭代器.
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |