さてさて、この質問のためのハードフレーズに正確なタイトルによってリストが、ここに行く...私はこのようになり、ブロックと呼ばれる抽象クラス、持っている:IEnumerableをオーバーライドチェーン
public abstract class Block
{
public bool Enabled{get; private set;}
public virtual IEnumerable<KeyValuePair<string, string>> GetDefaultUsages()
{
yield return new KeyValuePair<string, string>("Enabled", "true");
}
}
をそして私は言いますサブクラスを持っている:
public class Form : Block
{
public string Key{get; private set;}
public override IEnumerable<KeyValuePair<string, string>> GetDefaultUsages()
{
yield return new KeyValuePair<string,string>("Key", string.Empty);
// can't do: yield return base.GetDefaultUsages()
}
}
アイデアはGetDefaultUsages()は常に全体の継承チェーンを通じてspecififedれたすべての文字列、文字列のペアを含むIEnumerableをを返すことです。私は当初yieldキーワードが次のようなステートメントをサポートすることを望んでいました:
yield return (some IEnumerable<T> object);
明らかにそれは動作しません。
foreach(KeyValuePair<string, string> kv in base.GetDefaultUsages())
{
yield return kv;
}
しかし、私は少しきれいな構文を期待(およびすべての不要な中間IEnumeratorsを作成回避した):私は、私は何ができることを実現します。
誰でもこの方法を実装するには良い方法がありますか?
+1良い質問のために – JohannesH
[ネストされたyield return with IEnumerable](http://stackoverflow.com/questions/1270024/nested-yield-return-with-ienumerable) – nawfal