广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#迭代器方法介绍
  • 427
分享到

C#迭代器方法介绍

2024-04-02 19:04:59 427人浏览 八月长安
摘要

目录1.迭代器方法2.手动实现迭代器方法1.迭代器方法 可以使用foreach循环语句进行的迭代的方法,称为可迭代方法,或者迭代器方法。 迭代器用法法介绍。   迭代器用于依次返回每

1.迭代器方法

可以使用foreach循环语句进行的迭代的方法,称为可迭代方法,或者迭代器方法。

迭代器用法法介绍。

  迭代器用于依次返回每个元素,一般用于foreach循环语句。迭代器方法需要使用yield return语句。

 yield return 语句介绍:

  保持代码的当前位置,在下一次调用迭代器方法时执行。

 迭代方法在使用过程中左右步骤对应。yield return语句主要是返回一个结果作为函数调用的结果。并记录当前运行位置,当下次函数被调用时,在当前位置执行这个函数。在迭代块中除了yield return外,不允许出现普通的return语句。

迭代方法使用的命名空间为using System.Collections.Generic;

下面代码为迭代器使用的具体代码:

class Program
{
    public static IEnumerable<int> Fibs()
    {
        int f1 = 1, f2 = 2;
        while (true)
        {
            yield return f1;
            yield return f2;
            f1 += f2;
            f2 += f1;
        }
    }
    static void Main(string[] args)
    {
        foreach (int i in Fibs())
            if (i < 20)
                Console.WriteLine("{0}", i);
 
            else
                break;
        Console.ReadKey();
    } 
}

 IEnumerable是泛型定义的里面的int关系到你迭代对象yield return返回值的类型。如果你定义IEnumerable<int>那么你返回的值是int类型,如果你定义IEnumerable那么你的返回值是string类型以此类推。如果你想以某个条件结束方法。可以使用外面的条件如上图所示。也可以使用yield break。

class Program
{
    public static IEnumerable Fibs()
    {
        string f1 = "1", f2 = "2";
        while (true)
        {
            yield return f1;
            yield return f2;
            f1 += f2;
            f2 += f1;
            if (f1.Length > 8)
                yield break;
        }
    }
 
    static void Main(string[] args)
    {
        foreach (string i in Fibs())
             
                Console.WriteLine("{0}", i);
        Console.ReadKey();
    } 
}

2.手动实现迭代器方法

首先是通过使用接口IEnumerable的方式,然后编写IEnumerator GetEnumerator()的方式。在代码中控制索引位置,和循环次数。如果索引位置出错则使用代码throw new NotImplementedException()报错。

using System;
using System.Collections;
using System.Collections.Generic;
 
 
namespace test02
{
    class Program
    {
        static void Main(string[] args)
        {
            object [] e = new object[5] { 1, 2, 3, 4, 5 };
            Itear01 s = new Itear01(e,2);
            foreach (object i in s)
                    Console.WriteLine("{0}", i);
            Console.ReadKey();
        } 
    }
 
    public class Itear01 : IEnumerable
    {
        object[] values;
        int StartPoint=-1;
        int current=0;
        public Itear01(object[] values,int StartPoint)
        {
            this.values = values;
            this.StartPoint = StartPoint;
        }
        public IEnumerator GetEnumerator()
        {
            if(this.StartPoint==-1)
                throw new NotImplementedException();
            while(true)
            {
                yield return this.values[StartPoint];
                StartPoint = (StartPoint + 1) % values.Length;
                current++;
                if (current == values.Length)
                {
                    break;
                }
            }
             
        }
    }
}

到此这篇关于C#迭代器方法介绍的文章就介绍到这了,更多相关C#迭代器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C#迭代器方法介绍

本文链接: https://www.lsjlt.com/news/141482.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#迭代器方法介绍
    目录1.迭代器方法2.手动实现迭代器方法1.迭代器方法 可以使用foreach循环语句进行的迭代的方法,称为可迭代方法,或者迭代器方法。 迭代器用法法介绍。   迭代器用于依次返回每...
    99+
    2022-11-13
  • C ++迭代器iterator在string中使用方法介绍
    目录一、正向迭代器二、正向迭代器(只读数据)三、反向迭代器四、反向迭代器(只读)五、auto来替换这些特别长类型名一、正向迭代器 【例子】 //正向迭代器 void test1()...
    99+
    2022-11-13
    C ++迭代器iterator C ++迭代器在string使用
  • Python迭代器介绍及作用详情
    目录迭代器:初探什么是迭代器?通过迭代器进行迭代迭代器 for 循环的工作构建自定义迭代器Python 无限迭代器Python 迭代器的好处总结 迭代器:初探 Python 学习的人...
    99+
    2022-11-11
  • C#如何实现迭代器方法
    这篇文章主要介绍C#如何实现迭代器方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.迭代器方法可以使用foreach循环语句进行的迭代的方法,称为可迭代方法,或者迭代器方法。迭代器用法法介绍。  迭代器用于依次返...
    99+
    2023-06-29
  • JavaScript可迭代对象详细介绍
    目录1、迭代器2、迭代器接口与可迭代对象3、自定义可迭代对象3.1、可迭代的Range对象3.2、使用Generator函数作为迭代器接口3.3、可迭代的List3.3、可迭代的迭代...
    99+
    2022-11-13
  • C#调用WebService的方法介绍
    一、前言 在日常工作中,如果涉及到与第三方进行接口对接,有的会使用WebService的方式,这篇文章主要讲解在.NET Framework中如何调用WebService。首先我们创...
    99+
    2022-11-13
  • C++解析wav文件方法介绍
    目录一、前言二、接口三、具体步骤四、完整源码一、前言 一开始本来在网上找代码,不过改了好几个都不是很好用。因为很多wav文件的fmt块后面并不是data块,经常还带有其他块,正确的方...
    99+
    2022-11-13
  • C#操作进程的方法介绍
    进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行...
    99+
    2022-11-13
  • C#中的Task.WaitAll和Task.WaitAny方法介绍
    一、简介 Task.WaitAll:等待所有提供的 Task 对象完成执行过程。 Task.WaitAny:等待提供的任一 Task 对象完成执行过程。 二、代码案例 Task.Wa...
    99+
    2022-11-13
  • C#中的Task.WhenAll和Task.WhenAny方法介绍
    一、简介 Task.WhenAll()、Task.WhenAny()这两个与Task.WaitALL()、Task.WaitAny()是有区别的,When是异步的,Wait是同步的。...
    99+
    2022-11-13
  • C++ plog日志使用方法介绍
    目录一、下载plog二、在VS中搭建plog编译环境三、使用plog日志库四、QTCreator使用plog日志库五、总结一、下载plog 下载链接:https://github.c...
    99+
    2022-11-13
  • C#接口方法的实例介绍
    本篇内容介绍了“C#接口方法的实例介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!公有方法实现C#接口方法尽管C#在定义接口时不用指明接口...
    99+
    2023-06-18
  • C++堆栈的使用方法介绍
    本篇内容介绍了“C++堆栈的使用方法介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在开发这个大的领域,C++堆栈是一个不容忽视的概念,但...
    99+
    2023-06-17
  • Java递归和迭代区别详细介绍
    目录1.递归和迭代的区别2.代码1.递归和迭代的区别 当实体调用自身时,程序称为递归。当存在循环(或重复)时,程序称为迭代调用。示例:求一个数的阶乘的程序  时间复杂度比较...
    99+
    2023-05-15
    Java 递归和迭代区别介绍 Java递归和迭代的区别 递归和迭代的区别
  • jQuery操作HTML代码方法介绍
    html()可以对HTML代码进行操作,类似于元素JavaScript中的innerHTML。 例如: 示例: <!DOCTYPE html> <html lan...
    99+
    2022-11-13
  • C#委托方法Func()中GetInvocationList()方法的用法介绍
    在日常使用委托时,有以下常用方法 方法名称说明 Clone  创建委托的浅表副本。 GetInvocationList  按照调用顺序返回此多...
    99+
    2022-11-12
  • C#中Dispose和Finalize方法使用介绍
    一、前言 在C#中,由于有了垃圾回收机制的支持,对象的析构和以前的C++有了很大的不同,这就要求程序员在设计类型的时候,充分理解.NET的机制,明确怎样利用Dispose方法和Fin...
    99+
    2022-11-13
  • C++迭代器与二分查找方法是什么
    本篇内容主要讲解“C++迭代器与二分查找方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++迭代器与二分查找方法是什么”吧!boolsearch_value_loop(std::vec...
    99+
    2023-06-04
  • C++Vector迭代器失效问题的解决方法
    目录一、迭代器失效二、可能引起的迭代器失效的操作2.1、野指针引起迭代器失效2.2、迭代器指向的位置意义改变2.3、总结一、迭代器失效 主要作用就是让算法能够不用关心底层数据结构,其...
    99+
    2022-11-13
    C++ Vector迭代器失效 C++ 迭代器失效
  • android:descendantFocusability方法介绍
    此方法适用于所有母控件无法获取焦点的情况 开发中很常见的一个问题,项目中的listview不仅仅是简单的文字,常常需要自己定义listview,自己的Adapter去继承Bas...
    99+
    2022-06-06
    Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作