您现在的位置是:首页 >技术杂谈 >【unity之c#】所以迭代器的原理知识你还清楚吗?网站首页技术杂谈

【unity之c#】所以迭代器的原理知识你还清楚吗?

秩沅 2024-08-07 18:01:01
简介【unity之c#】所以迭代器的原理知识你还清楚吗?

在这里插入图片描述


?‍?个人主页@元宇宙-秩沅

?‍? hallo 欢迎 点赞? 收藏⭐ 留言? 加关注✅!

?‍? 本文由 秩沅 原创

?‍? 收录于专栏unityc#专题

?️系统路线学习点击跳转


【Unityc#专题篇】之c#核心篇】

【Unityc#专题篇】之c#基础篇】

【Unity-c#专题篇】之c#入门篇)

【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


迭代器原理




?(A自定义标准迭代器原理


步骤:

  • 1.继承两个关键接口:
    IEnumerable , IEnumerator
    (关键的是两个接口里面的方法)
  • 2.给继承后的几个成员添加逻辑
    IEnumerabale GetEnumerable()
    object Current
    bool MoveNext()
    Reset()
  • 3.目的为使得foreach能够调用到各个元素
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _迭代器
{
    class DDQ : IEnumerable, IEnumerator
    {
        int[] arrary;
        int curionPosition ;

        public DDQ()
        {
            arrary = new int[] { 1, 2, 3, 4, 5, 6 };
        }

        public IEnumerator GetEnumerator()
        {
            Reset();
            return this;
        }

          //使用foreach的时候会自动调用 Current属性来返回值
        public object Current
        {
            get
            {
                return arrary[curionPosition];
            }
        }

        public bool MoveNext()
        {
            curionPosition++;
            //当光标位置小于数组长度时返回true
            return curionPosition < arrary .Length ;
        }

           //重置光标的作用
        public void Reset()
        {
            curionPosition = -1;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            DDQ ddq = new DDQ();
            foreach (int item in ddq)
            {
                Console.WriteLine(item);
            }
        }
    }
}


?(Byield return 语法糖实现


  • 1.作用:
    将复杂逻辑简单化,增加可读性

  • 2.只需继承一个接口: IEnumerable

(所以 yield return 和IEnumrable配套使用)

  • 直接省去了IEnumreable接口下的几个成员方法,一步到位
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _迭代器
{
    class DDQ : IEnumerable
    {
        int[] arrary;
        public DDQ()
        {
            arrary = new int[] { 1, 2, 3, 4, 5, 6 };
        }

        public IEnumerator GetEnumerator()
        {
            for (int i = 0; i < arrary.Length; i++)
            {
                yield return arrary[i]; //直接省去了IEnumreable接口下的几个成员方法,一步到位
            }
        
        }

   
    }
    class Program
    {
        static void Main(string[] args)
        {
            DDQ ddq = new DDQ();
            foreach (int item in ddq)
            {
                Console.WriteLine(item);
            }
        }
    }
}


?(c思维导图总结


在这里插入图片描述


?(D实践练习


在这里插入图片描述

  • 实践经验

    所以如果要使自定义的类能够使用foreach遍历,就需要继承迭代器接口通过两个方法实现:
    1.自定义迭代器实现
    2.语法糖yeild return 实现

?️系统路线学习点击跳转


【Unityc#专题篇】之c#核心篇】

【Unityc#专题篇】之c#基础篇】

【Unity-c#专题篇】之c#入门篇)

【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


你们的点赞? 收藏⭐ 留言? 关注✅是我持续创作,输出优质内容的最大动力!


在这里插入图片描述


风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。