私は木のような構造を持っています。この構造体の各要素は、ルートとなるすべての要素のEnumerableを返すことができる必要があります。このメソッドをIEnumerable<Foo> GetAll()
としましょう。 {C, F, G}
を返しC
要素にGetAll
へだから我々はツリー内のネストされた歩留まりのパフォーマンス
A <-- topmost root
/ \
B C
/\ /\
D E 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()
を使用して、子-FOOSを追加しました。
私の質問は、利回りを使用しているバージョンが正しく実装されているか、改善が必要なのかどうかです(特にパフォーマンスに関して)。またはこれはちょうど悪いですか?List
(またはReadOnlyCollections
)に代わってください。
あの、なぜあなたはこの場合は最後に休憩を得たいですか? –
なぜこれが最後に必要ですか?私は、Enumerableメソッドが終了したときに列挙子が自動的に終了したと考えました... – Bevan
うーん、おそらく私は収量の使用に関して何か誤解しました。私が覚えているように、yield breakでメソッドを閉じなければエラーが出ます。私が何かばかげたと言ったらすみません!その問題を調べるつもりです... – ShdNx