码迷,mamicode.com
首页 > Windows程序 > 详细

12.1.2 在 C# 中使用迭代器

时间:2015-01-19 10:59:32      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:f#   函数编程   实用函数编程   序列   迭代器   

12.1.2 在 C# 中使用迭代器

 

当C# 2.0 最初引入迭代器时,最常见的用途是为了使自己集合的 IEnumerable<T> 接口的实现更简单。在 C# 中使用的编程风格已经有了演变,现在迭代器能与其它函数式结构一起使用,进行各种数据处理操作。

迭代器可以用来生成任意序列。我们先从一个简单的示例开始,生成阶乘小于一百万的序列,并格式化成字符串形式。清单 12.1 显示了完整的源代码。

 

清单 12.1 用迭代器生成阶乘(C#)

static IEnumerable<string>Factorials() {

  intfactorial = 1;    [1]

 for(int num = 0; factorial < 1000000; num++) {

   factorial = factorial * num;   [2]

   yield return String.Format("{0}! = {1}", num, factorial);  <-- 返回下一个字符串

  }

}

 

C# 编译器对迭代器代码执行相当复杂的转换,创建实现 IEnumerable<T> 接口的“隐藏”类型。清单 12.1 中重要的地方在于处理局部状态。我们声明一个局部变量[1],保存一些可变状态,另一个可变变量声明为 for 循环的一部分。算法在循环内实现,当我们每次想从迭代器中取出另一个值时,都会执行,循环体更新迭代器的局部状态[2],并生成新的计算值。

代码完全是命令式的,因为严重依赖于变量,但从迭代器的外部来看,几乎就像是函数式的数据类型,因为可变状态都隐藏了。现在,我们要看一下序列表达式(sequence expression),F# 通常来生成、处理序列。

12.1.2 在 C# 中使用迭代器

标签:f#   函数编程   实用函数编程   序列   迭代器   

原文地址:http://blog.csdn.net/hadstj/article/details/42869553

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!