In Ordnung, hart Begriff eine genaue Bezeichnung für diese Frage, aber hier geht ... Ich habe eine abstrakte Klasse namens Block, die etwa wie folgt aussieht:IEnumerable Liste durch Überschreibung Kette
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");
}
}
Und ich sage haben eine Unterklasse:
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()
}
}
die Idee ist, dass GetDefaultUsages() wird immer eine IEnumerable enthält alle String, String-Paaren, die durch die gesamte Vererbungskette specififed wurden. Ich hatte gehofft, zunächst, dass die Ausbeute Schlüsselwort eine Anweisung wie unterstützen würde:
yield return (some IEnumerable<T> object);
Aber anscheinend das funktioniert nicht. Ich weiß, dass ich tun konnte:
foreach(KeyValuePair<string, string> kv in base.GetDefaultUsages())
{
yield return kv;
}
Aber ich hatte gehofft, für eine etwas sauberere Syntax (und alle unnötigen Zwischen IEnumerators vermieden erstellen).
Wer hat irgendwelche Ideen von einem guten Weg, dies zu implementieren ???
+1 für eine gute Frage – JohannesH
möglich Duplikat von [Nested yield return mit IEnumerable] (http://stackoverflow.com/questions/1270024/nested-yield-return-with-ienerable) – nawfal