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


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


在这里插入图片描述


目录
相关文章
|
24天前
|
设计模式 Java 数据库连接
手写自定义迭代器,秒懂迭代器底层原理
迭代器模式的UML类图如下图所示。
13 0
|
1月前
|
算法 测试技术 C++
10.1 C++ STL 模板适配与迭代器
STL(Standard Template Library)标准模板库提供了模板适配器和迭代器等重要概念,为开发者提供了高效、灵活和方便的编程工具。模板适配器是指一组模板类或函数,它们提供一种适配机制,使得现有的模板能够适应新的需求。而迭代器则是STL中的令一种重要的概念,它是一个抽象化的数据访问机制,通过迭代器可以遍历STL容器中的元素。适配器与迭代器两者的紧密配合,使得开发者能够高效地处理容器中的元素,提高了代码的复用性和可维护性。
23 0
|
2月前
|
JavaScript 前端开发
《现代Javascript高级教程》Iterator迭代器:简化集合遍历的利器
Iterator 迭代器:简化集合遍历的利器 引言 在 JavaScript 中,迭代器(Iterator)是一种用于遍历集合的接口。迭代器提供了一种统一的方式来访问集合中的元素,无论集合的类型和内部结构如何。通过使用迭代器,我们可以轻松地遍历数组、对象、Map、Set 等各种数据结构,并进行相应的操作。本文将详细介绍迭代器的概念、属性、应用场景,并提供相关的代码示例。
35 1
|
6月前
|
前端开发
前端学习案例2-迭代器和生成器2
前端学习案例2-迭代器和生成器2
52 0
前端学习案例2-迭代器和生成器2
|
6月前
|
前端开发
前端学习案例1-迭代器和生成器1
前端学习案例1-迭代器和生成器1
52 0
前端学习案例1-迭代器和生成器1
|
6月前
|
前端开发
前端学习案例4-迭代器和生成器4
前端学习案例4-迭代器和生成器4
52 0
前端学习案例4-迭代器和生成器4
|
6月前
|
前端开发
前端学习案例6-迭代器和生成器6
前端学习案例6-迭代器和生成器6
26 0
前端学习案例6-迭代器和生成器6
|
6月前
|
前端开发
前端学习案例7-迭代器和生成器7
前端学习案例7-迭代器和生成器7
34 0
前端学习案例7-迭代器和生成器7
|
6月前
|
前端开发
前端学习案例2-迭代器-生成器2
前端学习案例2-迭代器-生成器2
15 0
前端学习案例2-迭代器-生成器2
|
6月前
|
前端开发
前端学习案例1-迭代器-生成器1
前端学习案例1-迭代器-生成器1
19 0
前端学习案例1-迭代器-生成器1
相关产品
机器翻译
推荐文章
更多