Хорошо, сложно сформулировать точное название для этого вопроса, но здесь идет ... У меня есть абстрактный класс с именем Block, который выглядит примерно так:
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 () всегда будет возвращать IEnumerable, содержащий все строки строк, пары строк, которые были указаны во всей цепочке наследования. Сначала я надеялся, что ключевое слово yield будет поддерживать такое утверждение, как:
yield return (some IEnumerable<T> object);
Но, видимо, это не работает. Я понимаю, что я мог сделать:
foreach(KeyValuePair<string, string> kv in base.GetDefaultUsages())
{
yield return kv;
}
Но я надеялся на немного более чистый синтаксис (и избегал создания всех ненужных промежуточных IEnumerators).
Кто-нибудь получил какие-либо идеи о хорошем способе реализации этого ???