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;
    }
}
相关推荐
盛夏绽放2 小时前
jQuery 知识点复习总览
前端·javascript·jquery
胡gh4 小时前
依旧性能优化,如何在浅比较上做文章,memo 满天飞,谁在裸奔?
前端·react.js·面试
haogexiaole4 小时前
Redis优缺点
数据库·redis·缓存
在未来等你4 小时前
Redis面试精讲 Day 27:Redis 7.0/8.0新特性深度解析
数据库·redis·缓存·面试
大怪v4 小时前
超赞👍!优秀前端佬的电子布洛芬技术网站!
前端·javascript·vue.js
胡gh4 小时前
你一般用哪些状态管理库?别担心,Zustand和Redux就能说个10分钟
前端·面试·node.js
新法国菜5 小时前
MySql知识梳理之DML语句
数据库·mysql
老华带你飞6 小时前
校园交友|基于SprinBoot+vue的校园交友网站(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·校园交友网站
许泽宇的技术分享6 小时前
Text2API与Text2SQL深度对比:自然语言驱动的数据交互革命
数据库·windows·microsoft
roamingcode6 小时前
Claude Code NPM 包发布命令
前端·npm·node.js·claude·自定义指令·claude code