Alright, hard to phrase an exact title for this question, but here goes... I have an abstract class called Block, that looks something like this:
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");
}
}
And say I have a subclass:
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()
}
}
The idea is that GetDefaultUsages() will always return an IEnumerable containing all the string,string pairs that were specififed through the entire inheritance chain. I was initially hoping that the yield keyword would support a statement like:
yield return (some IEnumerable<T> object);
But apparently that doesn't work. I realize that I could do:
foreach(KeyValuePair<string, string> kv in base.GetDefaultUsages())
{
yield return kv;
}
But I was hoping for a slightly cleaner syntax (and avoiding creating all the unnecessary intermediate IEnumerators).
Anyone got any ideas of a good way to implement this???