我有一棵树状结构。这个结构中的每个元素都应该能够返回它所有根元素的Enumerable。我们称之为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;
}
}
}
在早期的实现中,我返回列表,并使用List.AddRange()
增加了儿童的Foo。
我的问题是如果使用yield的版本得到了正确实施,或者应该改进(特别是在性能方面)。或者这是不好的,我应该坚持List
s(或ReadOnlyCollections
)?
嗯,你为什么会想在这种情况下,最终得到休息? – 2009-06-25 10:16:59
为什么最后需要这个?我认为枚举器在Enumerable方法退出时自动完成... – Bevan 2009-06-25 10:18:02
嗯,或许我误解了有关使用yield的一些问题。正如我记得,如果我没有用yield break来关闭这个方法,我会得到一个错误。如果我说了些蠢话,我很抱歉!要研究这个问题... – ShdNx 2009-06-25 10:20:18