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

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

在这里插入图片描述


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

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏unityc#专题

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

-

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

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

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

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

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


迭代器原理
-


@[TOC]



🎶(==A==)自定义标准迭代器原理


步骤:

  • 1.继承两个关键接口:
    IEnumerable , IEnumerator
    
    (关键的是两个接口里面的方法)
    • 2.给继承后的几个成员添加逻辑
      IEnumerabale GetEnumerable()
      object Current
      bool MoveNext()
      Reset()
    • 3.目的为使得foreach能够调用到各个元素
      ```cpp
      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);
        }
    }
}

}


---
## 🎶(==B==)<font color=green >yield return 语法糖实现</font>
---
+ **1.作用:**
           将复杂逻辑简单化,增加可读性

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

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

+ **直接省去了IEnumreable接口下的几个成员方法,一步到位**

```cpp
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#专题篇】—核心章题单实践练习


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


在这里插入图片描述


目录
相关文章
|
4月前
|
存储 人工智能 C#
【Unity 3D】C#中数组、集合、栈、队列、哈希表、字典的讲解(附测试代码)
【Unity 3D】C#中数组、集合、栈、队列、哈希表、字典的讲解(附测试代码)
36 0
|
4月前
|
存储 C# 图形学
【Unity 3D】C#数据类型和变量、命名规范的讲解(附源码)
【Unity 3D】C#数据类型和变量、命名规范的讲解(附源码)
51 1
|
4月前
|
搜索推荐 算法 C#
【Unity 3D】C#中冒泡排序、选择排序、插入排序等算法的详解(附源码 超详细)
【Unity 3D】C#中冒泡排序、选择排序、插入排序等算法的详解(附源码 超详细)
46 1
|
4月前
|
程序员 C# 图形学
【Unity 3D】C#中条件语句if else switch的讲解
【Unity 3D】C#中条件语句if else switch的讲解
49 1
|
3月前
|
定位技术 C# 图形学
Unity和C#游戏编程入门:创建迷宫小球游戏示例
Unity和C#游戏编程入门:创建迷宫小球游戏示例
72 2
|
4月前
|
JSON C# 图形学
【Unity 3D】利用C#、Unity和Socket实现简单的在线聊天室工具(附源码 简单易懂)
【Unity 3D】利用C#、Unity和Socket实现简单的在线聊天室工具(附源码 简单易懂)
48 0
|
4月前
|
网络协议 Unix Linux
【Unity 3D】C#中Socket及TCP三次握手与四次挥手详解(超详细 图文解释)
【Unity 3D】C#中Socket及TCP三次握手与四次挥手详解(超详细 图文解释)
42 0
|
4月前
|
数据可视化 C# 图形学
【Unity 3D】图形界面GUI的讲解及在C#中实现用户登录界面的实战(附源码)
【Unity 3D】图形界面GUI的讲解及在C#中实现用户登录界面的实战(附源码)
67 0
|
4月前
|
SQL 关系型数据库 MySQL
【Unity 3D】C#从mysql数据库中读取、封装SQL语句(附源码)
【Unity 3D】C#从mysql数据库中读取、封装SQL语句(附源码)
99 0
|
4月前
|
XML C# 图形学
【Unity 3D】C#从XML中写入、读取、修改数据(附源码)
【Unity 3D】C#从XML中写入、读取、修改数据(附源码)
37 0