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;
    }
}
相关推荐
LcVong2 分钟前
MySQL 5.2/5.7 开启Binlog日志详细步骤(附验证+查看+恢复)
数据库·mysql·adb
weixin199701080167 分钟前
《识货商品详情页前端性能优化实战》
前端·性能优化
Forever7_8 分钟前
重磅!Vue3 手势工具正式发布!免费使用!
前端·前端框架·前端工程化
用户806138166599 分钟前
发布为一个 npm 包
前端·javascript
FL4m3Y4n20 分钟前
MySQL缓存策略
数据库·mysql·缓存
wsx_iot22 分钟前
TDengine学习
数据库·学习·tdengine
树上有只程序猿39 分钟前
低代码何时能出个“秦始皇”一统天下?我是真学不动啦!
前端·后端·低代码
TT_哲哲40 分钟前
小程序双模式(文件 / 照片)上传组件封装与解析
前端·javascript
不吃香菜的小趴菜41 分钟前
mysql数据库打包与导入
数据库·mysql
野犬寒鸦44 分钟前
Redis复习记录day1
服务器·开发语言·数据库·redis·缓存