首页 > 代码库 > 迭代器
迭代器
迭代器模式的原始图如下:
不使用c# IEnumera 情况下 会这样写
public abstract class Aggegate<T> { public abstract ITerator<T> GeTerator(); } public class ConAggregate<T> : Aggegate<T> { public T[] Datas { set; get; } public override ITerator<T> GeTerator() { return new ConIterator<T>(this); } } public interface ITerator<out T> { void Reset(); bool MoveNext(); T CurrentItem { get; } } public class ConIterator<T> : ITerator<T> { private ConAggregate<T> ct; int position = -1; public ConIterator(ConAggregate<T> c) { ct = c; } public T CurrentItem { get { return ct.Datas[position]; } } public void Reset() { position = -1; } public bool MoveNext() { position++; return position < ct.Datas.Length; } }
c# 有IEnumerable,IEnumerator 两个接口 实现这两个接口 既可完成迭代。即可以使用Foreach 做遍历。
使用yield return;
public class ConAggregateYield<T>:IEnumerable { public T[] Datas { set; get; } public IEnumerator GetEnumerator() { for (int i = 0; i < Datas.Length; ++i) { yield return Datas[i]; } } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。