У меня есть древовидная структура. Каждый элемент этой структуры должен иметь возможность возвращать Enumerable из всех элементов, к которым он принадлежит root. Назовем этот метод IEnumerable<Foo> GetAll()
. Так что, если у нас естьПроизводительность вложенного урожая в дереве
A <-- topmost root
/ \
B C
/\ /\
D E F G
исходящий вызов в GetAll
на элемент C
возвращает {C, F, G}
(фиксированный порядок элементов было бы хорошо, но не требуется). Думаю, все это уже знали.
Текущая реализация GetAll
выглядит следующим образом:
public IEnumerable<Foo> GetAll()
{
yield return this;
foreach (Foo foo in MyChildren) {
foreach (Foo f in foo.GetAll()) {
yield return f;
}
}
}
В предыдущей реализации, я вернулся в списке и добавил ребенок-FOOS использования List.AddRange()
.
Мой вопрос в том, что версия с использованием доходности реализована или если она должна быть улучшена (особенно с точки зрения производительности). Или это просто плохо, и я должен придерживаться List
s (или ReadOnlyCollections
) вместо этого?
Гм, почему вы хотели бы дать перерыв в конце концов в этом случае? –
Зачем вам это нужно в конце? Я думал, что перечислитель автоматически закончил, когда метод Enumerable вышел ... – Bevan
Хм, возможно, я неправильно понял что-то относительно использования урожая. Как я помню, я получил ошибку, если не закрыл метод с выходом break ;. Извините, если я сказал что-то глупое! Взгляните на этот вопрос ... – ShdNx