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;
    }
}
相关推荐
飞翔的佩奇几秒前
Java项目: 基于SpringBoot+mybatis+maven课程答疑系统(含源码+数据库+毕业论文)
java·数据库·spring boot·毕业设计·maven·mybatis·课程答疑
炒毛豆5 分钟前
vue3+ant design vue实现可编辑表格弹出气泡弹出窗~
前端·javascript·vue.js
寰宇软件5 分钟前
vue组件注册
前端·javascript·vue.js
OEC小胖胖24 分钟前
js进阶-作用域是什么
开发语言·前端·javascript·ecmascript·web
OceanSky628 分钟前
Mybatis中sql数组为空判断
数据库·sql·mybatis·数组判空
Data 31738 分钟前
经典sql题(七)查找直播间最大在线人数
大数据·数据库·数据仓库·sql
小怪兽ysl1 小时前
【GBase 8c V5_3.0.0 分布式数据库常用几个SQL】
数据库·postgresql
东方翱翔1 小时前
HTML中的文字与分区标记
java·前端·html
dwjf3211 小时前
图数据库 neo4j 安装
数据库·neo4j
ling1s1 小时前
C#基础(12)递归函数
开发语言·算法·c#