代码拉取完成,页面将自动刷新
using System;
using System.Collections.Generic;
//4.6.3 迭代器
// 和foreach语句是枚举对象的使用者相对,迭代器是枚举对象的生产者。
namespace _110_枚举类型的迭代_迭代器
{
class Test
{
//本例中,我们用迭代器返回Fibonacci数列表(Fibonacci数列表的每个数字是前两个数之和):
static IEnumerable<int> Fibs(int fibCount)
{
for (int i = 0, prevFib = 1, curFib = 1; i < fibCount; i++)
{
yield return prevFib; // yield return
int newFib = prevFib + curFib;
prevFib = curFib;
curFib = newFib;
}
}
static void Main(string[] args)
{
foreach (int fib in Fibs(6))
{
Console.Write(fib + " ");
}
//return语句表示该方法返回的值,而yield return语句表示从本枚举器产生的下一个元素。在每条yield语句中,元素返回给调用者,但要维护被调用者的状态,这样方法才能在调用者索取下一个元素时继续执行。
//被调用者状态的生命周期绑定在枚举器上,这样当调用者结束枚举时,状态可以被释放。
//提示:编译器迭代方法转换成实现IEnumerable<T>和/或IEnumerator<T>的私有类,迭代器的程序块逻辑在编译器写的枚举类中,被“反转”并连接MoveNext方法和Current属性。这表明当调用迭代方法时,所做的只是实例化编译器写的类,编写的代码并不真正运行。编写的代码只有在开始遍历结果序列时才真正运行,典型的如foreach语句。
Console.ReadKey();
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。