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???
 
     
    