Ниже блока кода, который отображает числа больше 2 из MyList.
using System;
using System.Collections.Generic;
namespace CSharpBasics
{
internal class Program
{
private static List<int> MyList = new List<int>();
private static void Main(string[] args)
{
MyList.Add(1);
MyList.Add(2);
MyList.Add(3);
MyList.Add(4);
var test = FilterWithYield();
foreach (int i in test)
{
Console.WriteLine(i);
}
Console.ReadLine();
}
private static IEnumerable<int> FilterWithYield()
{
foreach (int i in MyList)
{
if (i > 2)
{
yield return i;
}
}
}
}
}
Теперь, когда мы устанавливаем точку останова на строку foreach (int i in test)
, перед выполнением *Переменная 1007 * loop , test
будет иметь результат из FilterWithYield()
.Как это возможно? Я понимаю, что до начала итерации метод IEnumerable никогда не выполнялся.
Я что-то здесь упускаю?
Спасибо.