Возвращать результат через yield return или обычную коллекцию
Не очень популярный вопрос на собеседовании, но если зайдет разговор, то лучше бы знать как ответить. А еще это действительно прикольный инструмент, которым нужно уметь пользоваться.
Что это вообще такое - мы можем создать бесконечный итератор, который потом будем использовать в foreach, при этом значения будут генерироваться в процессе перебора `public static IEnumerable GetNumbers() { var i = 0; while (true) { i++; yield return i; } }
Зачем это нужно? Самый простой известный пример - расчет факториала: `public static IEnumerable FactorialSequence() { long factorial = 1, n = 0; while (true) { if (n == 0) yield return 1; else { factorial *= n; yield return factorial; } n++; } }
И последнее - а если у меня обычная коллекция, которую я создаю и она конечна лучше ли использовать yield или сразу возвращать готовую коллекцию? Если сразу после вызова идет материализация CreateMySimpleBoundedCollection().ToArray() - то сразу готовую. Если потом планируем цепочку вызовов CreateMySimpleBoundedCollection().FilterByMyCondition().Take(pageSize) и особенно в этой цепочке предположительно возмем не всю коллекцию, а часть - есть смысл использовать yield
#junior``
· 12.06.2025
ого, оказывается в шарпе елды какие-то есть
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён