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

时间:2015-02-02 04:11:00

标签: 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;
        }
    }

我在void main的开头放了一个调试点。当我连续按f11时,黄色箭头仅覆盖主功能块,调试终止。它永远不会到达&#34; getnoslessthan5&#34;功能完全。被困。!

1 个答案:

答案 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查询从客户端代码中使用迭代器。