这篇文章主要介绍了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#迭代器方法介绍
基础教程推荐
- linux – 如何在Debian Jessie中安装dotnet core sdk 2023-09-26
- C# windows语音识别与朗读实例 2023-04-27
- winform把Office转成PDF文件 2023-06-14
- C# 调用WebService的方法 2023-03-09
- C#类和结构详解 2023-05-30
- ZooKeeper的安装及部署教程 2023-01-22
- C#控制台实现飞行棋小游戏 2023-04-22
- 一个读写csv文件的C#类 2022-11-06
- unity实现动态排行榜 2023-04-27
- C# List实现行转列的通用方案 2022-11-02