C#迭代器方法介绍

 更新时间:2022年03月06日 17:06:33   作者:Unity使人头秃~~~  
这篇文章主要介绍了C#迭代器方法,可以使用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#迭代器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C# 对XML操作入门实例

    C# 对XML操作入门实例

    C# 对XML操作入门实例,需要的朋友可以参考一下
    2013-04-04
  • C# 利用PdfSharp生成Pdf文件的示例

    C# 利用PdfSharp生成Pdf文件的示例

    这篇文章主要介绍了C# 利用PdfSharp生成Pdf文件的示例,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-04-04
  • C# Base64编码函数

    C# Base64编码函数

    Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。
    2009-06-06
  • C#生成随机字符串的实例

    C#生成随机字符串的实例

    本文介绍了“C#生成随机字符串的实例”,需要的朋友可以参考一下
    2013-03-03
  • c#中虚函数的相关使用方法

    c#中虚函数的相关使用方法

    若一个实例方法声明前带有virtual关键字,那么这个方法就是虚方法。
    2013-02-02
  • C# 实例解释面向对象编程中的单一功能原则(示例代码)

    C# 实例解释面向对象编程中的单一功能原则(示例代码)

    本文我介绍了 SOLID 原则中的单一功能原则(single-responsibility principle),并通过 C# 代码示例简明地诠释了它的含意和实现,对C# 面向对象编程原则感兴趣的朋友跟随小编一起看看吧
    2022-02-02
  • C#获取程序文件相关信息的方法

    C#获取程序文件相关信息的方法

    这篇文章主要介绍了C#获取程序文件相关信息的方法,可实现获取程序版本号、版权声明、程序文本信息等,需要的朋友可以参考下
    2014-09-09
  • Winform启动另一个项目传值的方法

    Winform启动另一个项目传值的方法

    这篇文章主要介绍了Winform启动另一个项目传值的方法,通过调用进程来实现项目之间的传值,需要的朋友可以参考下
    2014-11-11
  • C#引用访问权限分析

    C#引用访问权限分析

    这篇文章主要介绍了C#引用访问权限问题,对比C#与Java实例分析了C#在引入引用访问权限特性之后的具体用法,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • C#生成防伪码的思路及源码分享

    C#生成防伪码的思路及源码分享

    生成防伪码其实挺简单,但是如果要考虑效率和不重复的话,就需要稍微动动脑子了,下面我来说说我的思路及源码
    2014-06-06

最新评论