`
tianshibaijia
  • 浏览: 1125606 次
文章分类
社区版块
存档分类
最新评论

12.1.2 在 C# 中使用迭代器

 
阅读更多

12.1.2 在 C# 中使用迭代器

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

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

Listing 12.1 Generating factorials using iterators (C#)

static IEnumerable<string> Factorials() {
int factorial = 1;
for(int num = 0; factorial < 1000000; num++) {
factorial = factorial * num;
yield return String.Format("{0}! = {1}", num, factorial);
}
}

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

代码是非常命令式的,因为它严重依赖于变量,但从迭代器的外部看,几乎就像函数式的数据类型,因为,可变状态都隐藏了。让我们看看序列表达式(sequence expression),它是通常的 F# 机制,不仅可以生成序列,而且可以处理序列。

分享到:
评论

相关推荐

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    11.5.1 在C# 4.0中使用out类型参数修饰符允许协变性 331 11.5.2 在C# 4.0中使用in类型参数修饰符允许逆变性 332 11.5.3 数组对不安全协变性的支持 335 11.6 泛型的内部机制 335 11.6.1 基于值...

    Visual C# 2005程序设计自学手册 随书源码第一部分(共三部)

    5.12.3 迭代器的使用 113 5.13 分部类 114 5.13.1 什么是分部类 114 5.13.2 定义分部类 114 5.13.3 分部类的使用 114 5.14 事件和索引器 115 5.14.1 事件的概念及用途 115 5.14.2 事件的声明及使用 ...

    微软C#语言规范,C#语言教程中文版

    10.5.2.1 对常量使用静态只读字段 291 10.5.2.2 常量和静态只读字段的版本控制 291 10.5.3 可变字段 292 10.5.4 字段初始化 293 10.5.5 变量初始值设定项 293 10.5.5.1 静态字段初始化 294 10.5.5.2 实例字段初始化 ...

    C#教程(语言规范)

    7.2 通过调用索引器的 get-accessor 来获取索引器访问表达式的值。... 117 7.3 运算符 ... 117 7.3.1 运算符的优先级和顺序关联性 ... 117 7.3.2 运算符重载... 118 7.3.3 一元运算符重载决策... 119 7.3.4 ...

    C#语言规范(2.0,3.0,4.0合集)

    这个是C#语言规范2.0,3.0,4.0的合集,是关于 C# 语法的权威资料。它们包含该语言各个方面的详细信息,包括 Visual C# 产品文档未涉及的许多语法点。 4.0目录 1. 简介 1 1.1 Hello world 1 1.2 程序结构 2 1.3 ...

    LINQ 实战 1/11

    本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ...

    C#语言规范(4.0版本)

    Microsoft(微软)C#语言规范4.0版本,非常值得大家学习收藏! 目录 1. 简介 1 1.1 Hello world 1 1.2 程序结构 2 1.3 类型和变量 3 1.4 表达式 6 1.5 语句 8 1.6 类和对象 12 1.6.1 成员 12 1.6.2 可访问性 13 1.6.3 ...

    C#语言规范4.0

    10.5.2.1 对常量使用静态只读字段 291 10.5.2.2 常量和静态只读字段的版本控制 291 10.5.3 可变字段 292 10.5.4 字段初始化 293 10.5.5 变量初始值设定项 293 10.5.5.1 静态字段初始化 294 10.5.5.2 实例字段初始化 ...

    C#_语言规范_4.0_中文版

    C# 语言规范 版本 4.0 目录 1. 简介 1 1.1 Hello world 1 1.2 程序结构 2 1.3 类型和变量 3 1.4 表达式 6 1.5 语句 8 1.6 类和对象 12 1.6.1 成员 12 1.6.2 可访问性 13 1.6.3 类型参数 13 1.6.4 基类 14 1.6.5 字段...

    LINQ 实战 3/11

    本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ...

    LINQ 实战 4/11

    本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ...

    LINQ 实战 2/11

    本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ...

    LINQ 实战 7/11

    本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ...

    LINQ 实战 11/11

    本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ...

    LINQ 实战 5/11

    本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ...

    LINQ 实战 6/11

    本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ...

    LINQ 实战 8/11

    本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ...

    LINQ 实战 10/11

    本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ...

    LINQ 实战 9/11

    本书第一部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ...

Global site tag (gtag.js) - Google Analytics