Оператор yield break в C#
Оператор yield break немедленно завершает iterator-метод - как return без значения внутри генератора. После него MoveNext вернёт false, новых элементов не будет.
Так останавливают генератор, не заводя отдельный флаг и не возвращая готовую коллекцию.
Сгенерируем числа 1, 2, 3 и остановимся, когда счётчик превысит limit. При limit 0 генератор сразу завершится через yield break на первой итерации:
static IEnumerable<int> Until(int limit)
{
for (int i = 1; ; i++)
{
if (i > limit) yield break;
yield return i;
}
}
Console.WriteLine(string.Join(", ", Until(3))); // выведет 1, 2, 3
Отдавайте числа 3, 1, -2 и 4 по одному, пока число неотрицательное. Выведите то, что успело попасть в последовательность.