我有一个树状结构。此结构中的每个元素都应该能够返回它作为根的所有元素的 Enumerable。让我们调用这个方法IEnumerable<Foo> GetAll()
。所以如果我们有
A <-- topmost root
/ \
/ \
B C
/ \ / \
D E F G
GetAll
对on elementC
返回的调用{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;
}
}
}
在较早的实现中,我返回了一个 List 并使用List.AddRange()
.
我的问题是使用 yield 的版本是否正确实施或者是否应该改进(尤其是在性能方面)。还是这很糟糕,我应该坚持使用List
s (或ReadOnlyCollections
) ?