Lor*_*nVS 10 .net c# ienumerable
好吧,很难说出这个问题的确切标题,但是这里...我有一个名为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");
}
}
Run Code Online (Sandbox Code Playgroud)
并说我有一个子类:
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()
}
}
Run Code Online (Sandbox Code Playgroud)
我们的想法是,GetDefaultUsages()将始终返回一个IEnumerable,其中包含通过整个继承链指定的所有字符串,字符串对.我最初希望yield关键字支持如下语句:
yield return (some IEnumerable<T> object);
Run Code Online (Sandbox Code Playgroud)
但显然这不起作用.我意识到我能做到:
foreach(KeyValuePair<string, string> kv in base.GetDefaultUsages())
{
yield return kv;
}
Run Code Online (Sandbox Code Playgroud)
但我希望语法略微清晰(避免创建所有不必要的中间IEnumerator).
任何人有任何想法的好方法来实现这个???
你必须做类似foreach方法的事情,因为base.GetDefaultUsages()返回一个IEnumerable.yield return处理单个项目,而不是集合.虽然如果yield return可以返回一个对象集合会很好.
2周前,约翰奥克斯利问了一个类似的问题.
编辑: 似乎Bart Jacobs,Eric Meyer,Frank Piessens和Wolfram Schulte已经写了一篇非常有趣的论文,他们称之为嵌套迭代器,这基本上就是你所要求的.
| 归档时间: |
|
| 查看次数: |
2720 次 |
| 最近记录: |