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 키를 계속 누르면 노란색 화살표가 주 기능 블록 만 덮고 디버깅이 종료됩니다. 전혀 "getnoslessthan5"기능에 도달하지 않습니다.Visual Studio 2010에서 중단 점에 도달하지 못하는 이유는 무엇입니까?
내부의 주요 내부 기능 호출에 대한 호출이 있습니까? 그래서 함수는 올바르게 실행되어야합니다. ? – callyaser
@callyaser 아니요, IEnumerable을 반환하는 함수를 호출하고 있습니다. 즉, GetNosLessThan5는 "Iterating it over it"이라는 객체를 반환합니다. 그것은 ** 열거의 결과를 반환하지 않습니다 ** 당신은'.ToList' 또는 실제로 숫자를 계산하는 유사한 메소드를 호출해야 할 것입니다. '반복자'는 C#에서 약간의 컴파일러 마술입니다. –
(Iterators는 실행에 비용이 많이 들거나 심지어 무한하기 때문에 최적화 기법입니다. 호출자가 실행 여부, 실행 시간 및 실행 시간을 결정해야합니다.) –