为什么在VisualStudio 2010中未达到断点?

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"的功能.融合.!

Mic*_*tum 5

你永远不会实际迭代结果,因此GetNosLessThan5永远不会执行函数的实际主体.编译器在底层创建了一个迭代器,但实际上需要枚举它以使函数体运行.

请参阅有关迭代器MSDN文档.

迭代器可用于逐步执行列表和数组之类的集合.

迭代器方法或get访问器对集合执行自定义迭代.迭代器方法使用Yield(Visual Basic)或yield return(C#)语句一次返回一个元素.达到Yield或yield return语句时,将记住代码中的当前位置.下次调用迭代器函数时,将从该位置重新开始执行.

您可以使用For Each ... Next(Visual Basic)或foreach(C#)语句或使用LINQ查询从客户端代码中使用迭代器.