c# – 通过覆盖链的IEnumerable列表
发布时间:2020-12-15 03:55:50 所属栏目:百科 来源:网络整理
导读:好的,很难说这个问题的确切标题,但这里…我有一个抽象的类叫做Block,看起来像这样: public abstract class Block{ public bool Enabled{get; private set;} public virtual IEnumerableKeyValuePairstring,string GetDefaultUsages() { yield return new Ke
好的,很难说这个问题的确切标题,但这里…我有一个抽象的类叫做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). 任何人都有一个很好的方法实现这个想法? 解决方法
你必须像foreach方法那样做,因为base.GetDefaultUsages()返回一个IEnumerable.收益回报处理单项,而不是收藏.尽管如果yield返回可以返回一个对象的集合,那将是很好的.
2周前,约翰·奥克斯利(John Oxley)要求一个similar question. 编辑: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |