C# 迭代器

yield return 的核心逻辑和继承两个接口实现其中的方法是一样的

迭代器是一种设计模式

yield return 只需要继承一个IEnumerable接口

1.先获取in后面这个对象的 IEnumerator,会调用对象其中的GetEnumerator方法 来获取

2.执行得到这个IEnumerator对象中的 MoveNext方法

3.只要MoveNext方法的返回值时true 就会去得到Current,然后复制给 item

cs 复制代码
using System.Collections;
using System.Reflection;

class Program
{
    public static void Main()
    {
        Mylist alist = new Mylist();
        foreach (var item in alist)
        {
            Console.WriteLine(item);
        }
    }
}
class Mylist:IEnumerable,IEnumerator
{
    char[] charArray;
   int Cursor = -1;
    
    public Mylist() 
    {
        charArray = new char[] {'a','b','c','d','e'};
       
    }

    //public IEnumerator GetEnumerator()
    //{
    //    for (int i = 0; i < charArray.Length; i++)
    //    {
    //        yield return charArray[i];
    //    }
    //}


    public object Current 
    {
        get
        {
            return charArray[Cursor];
        }
    }
    public IEnumerator GetEnumerator()
    {
        Reset();
       return this;
    }

    public bool MoveNext()
    {
        Cursor++;
        return (Cursor < charArray.Length);
    }

    public void Reset()
    {
        Cursor = -1;
    }
}
相关推荐
理想三旬13 分钟前
关系数据库
数据库
漂流瓶jz14 分钟前
SourceMap数据生成核心原理:简化字段与Base64VLQ编码
前端·javascript·算法
桜吹雪18 分钟前
手搓一个简易Agent
前端·人工智能·后端
诸葛老刘38 分钟前
前端 css中的函数
前端·css
谢尔登42 分钟前
通用会话控制方案
前端·网络协议·tcp/ip·react.js·gitlab
惜茶1 小时前
websocket操作入门
前端·javascript·websocket
摇滚侠2 小时前
Vue 项目实战《尚医通》,获取当前账户就诊人信息并展示出来,笔记42
前端·javascript·vue.js·笔记·html5
han_2 小时前
前端高频面试题之Vue-router篇
前端·vue.js·面试
C.果栗子2 小时前
Blob格式的PDF文件调用打印,浏览器文件打印(兼容)
前端·javascript·pdf
Charles_go2 小时前
41、C#什么是单例设计模式
java·设计模式·c#