Хорошо, пока я копался над созданием собственного перечислителя, я заметил такое поведение, которое касается yield
Допустим, у вас есть что-то вроде этого:
public class EnumeratorExample
{
public static IEnumerable<int> GetSource(int startPoint)
{
int[] values = new int[]{1,2,3,4,5,6,7};
Contract.Invariant(startPoint < values.Length);
bool keepSearching = true;
int index = startPoint;
while(keepSearching)
{
yield return values[index];
//The mind reels here
index ++
keepSearching = index < values.Length;
}
}
}
Что делает это возможным под капотом компилятора, чтобы выполнить index ++ и остальную часть кода в цикле while после того, как вы технически выполните возврат из функции?