Когда у меня есть кодовый блок
static void Main()
{
foreach (int i in YieldDemo.SupplyIntegers())
{
Console.WriteLine("{0} is consumed by foreach iteration", i);
}
}
class YieldDemo
{
public static IEnumerable<int> SupplyIntegers()
{
yield return 1;
yield return 2;
yield return 3;
}
}
могу ли я интерпретировать принцип возврата доходности как
- Main() вызывает SupplyIntegers()
|1| |2| |3| are stored in contiguous memory block.Pointer of "IEnumerator" Moves to |1|
- Управление возвращается из SupplyInteger() в Main().
- Main() печатает значение
- Указатель перемещается на |2| и так далее.
Пояснения:
(1) Обычно у нас будет один допустимый оператор return внутри функции. Как C # обрабатывает, когда присутствует несколько операторов yield return, yield return,...?
(2) После того, как произойдет возврат, управление снова не вернется к SupplyIntegers(), если это разрешено, не будет ли Yield снова начинаться с 1? Я имею в виду доходность возврата 1?