Собеседования c#
13.05
Возвращать результат через 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``еще контент в этом сообществе
еще контент в этом соообществе
Собеседования c#
13.05
войдите, чтобы увидеть
и подписаться на интересных профи