【发布时间】:2010-11-22 20:38:06
【问题描述】:
好的,很难为这个问题给出一个确切的标题,但这里是……我有一个名为 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;
}
但我希望语法更简洁(并避免创建所有不必要的中间 IEnumerator)。
有人知道实现这个的好方法吗???
【问题讨论】:
标签: c# .net ienumerable