C# 为什么VisualStudio 2010中未达到断点? static void Main(字符串[]args) { List li=新列表(){1,20,30,4,5}; Getnoslessthan 5(李); } 公共静态IEnumerable GetNosLessThan5(列表编号) { foreach(数值中的var v) { if(v
我在void main的开始处设置了一个调试点。当我连续按f11时,黄色箭头仅覆盖主功能块,调试终止。它从来没有达到“getnoslessthan5”函数。困惑 您从未实际迭代过结果,因此,C# 为什么VisualStudio 2010中未达到断点? static void Main(字符串[]args) { List li=新列表(){1,20,30,4,5}; Getnoslessthan 5(李); } 公共静态IEnumerable GetNosLessThan5(列表编号) { foreach(数值中的var v) { if(v,c#,visual-studio-2010,visual-studio-debugging,C#,Visual Studio 2010,Visual Studio Debugging,我在void main的开始处设置了一个调试点。当我连续按f11时,黄色箭头仅覆盖主功能块,调试终止。它从来没有达到“getnoslessthan5”函数。困惑 您从未实际迭代过结果,因此,GetNosLessThan5函数的实际主体从未执行过。编译器在引擎盖下创建了一个迭代器,但需要实际枚举它才能运行函数体 看 迭代器可用于单步遍历列表和数组等集合 迭代器方法或get访问器对集合执行自定义迭代。迭代器方法使用Yield(visualbasic)或Yield return(C#)语句一次返回一个
GetNosLessThan5
函数的实际主体从未执行过。编译器在引擎盖下创建了一个迭代器,但需要实际枚举它才能运行函数体
看
迭代器可用于单步遍历列表和数组等集合
迭代器方法或get访问器对集合执行自定义迭代。迭代器方法使用Yield(visualbasic)或Yield return(C#)语句一次返回一个元素。当到达Yield或Yield-return语句时,将记住代码中的当前位置。下次调用迭代器函数时,将从该位置重新启动执行
通过使用For Each…Next(Visual Basic)或foreach(C#)语句或LINQ查询,可以从客户机代码中使用迭代器
但是,长官,在main里面有一个对函数的调用,对吗?所以函数应该正确执行@callyaser否,您正在调用一个函数,该函数返回一个
IEnumerable
——换句话说,GetNosLessThan5
返回一个表示“我可以迭代”的对象。它不返回枚举的结果-为此,您必须调用.ToList
或实际计算数字的类似方法<代码>迭代器是C#中的一种编译器魔法。(这是一种优化技术,因为迭代器的运行成本很高,甚至是无限的。调用方负责决定是否、何时以及运行多长时间)我得到了它,先生。!非常感谢。!
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;
}
}