C#2.0中使用yield关键字简化枚举器的实现
我们知道要使用foreach语句从客户端代码中调用迭代器,必需实现IEnumerable接口来公开枚举器,IEnumerable是用来公开枚举器的,它并不实现枚举器,要实现枚举器必需实现IEnumerator接口。现在用 yield关键字,您不必实现整个 IEnumerator 接口。从而简化了代码. 而且可以实现更加灵活的枚举。
如下代码:
1// Declare the collection:
2public class SampleCollection
3{
4 public int[] items;
5
6 public SampleCollection()
7 {
8 items = new int[5] { 5, 4, 7, 9, 3 };
9 }
10
11 public System.Collections.IEnumerable BuildCollection()
12 {
13 for (int i = 0; i < items.Length; i++)
14 {
15 yield return items[i];
16 }
17 }
18}
19
20class MainClass
21{
22 static void Main()
23 {
24 SampleCollection col = new SampleCollection();
25
26 // Display the collection items:
27 System.Console.WriteLine("Values in the collection are:");
28 foreach (int i in col.BuildCollection())
29 {
30 System.Console.Write(i + " ");
31 }
32 }
33}
34
或者
Code
1class Program
2 {
3 static void Main(string[] args)
4 {
5 SampleCollection s = new SampleCollection();
6
7 foreach(int i in s)
8 {
9 Console.WriteLine(i.ToString());
10 }
11 }
12 }
13
14 public class SampleCollection:IEnumerable
15 {
16 public int[] items;
17
18 public SampleCollection()
19 {
20 items = new int[5] { 5, 4, 7, 9, 3 };
21 }
22
23 public IEnumerator GetEnumerator()
24 {
25 for (int i = 0; i < items.Length; i++)
26 {
27 yield return items[i];
28 }
29 }
30 }
我们在注意的是C#2.0增加了yield关键字,简化了对枚举器的实现。但他只不过是在编译器上的改变,实际上是由编译器帮我们实现了IEnumerator接口的枚举器.
C#2.0中使用yield关键字简化枚举器的实现的更多相关文章
- 解析Python中的yield关键字
前言 python中有一个非常有用的语法叫做生成器,所利用到的关键字就是yield.有效利用生成器这个工具可以有效地节约系统资源,避免不必要的内存占用. 一段代码 def fun(): for i i ...
- python中的yield关键字
yield关键字一直困扰了我很久,一直也没有弄明白,现在将暂时理解的yield记录如下,供参考: 关键词:可迭代对象,生成器,迭代器 一.可迭代对象: 可迭代对象:可迭代对象是一个泛称,只要可以用fo ...
- .NET中的yield关键字
浅谈yield http://www.cnblogs.com/qlb5626267/archive/2009/05/08/1452517.html .NET中yield关键字的用法 http://bl ...
- Java&&As3.0 中的final 关键字
Java和AS3.0关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率. 可以修饰的对象: fin ...
- 深入理解python中的yield关键字
想必大家都看过这样的代码: 上面的这段代码会计算0-9的平方并打印出来. 那么问题来了,这段代码和我们要说的东西有什么区别呢? 这里的关键字,yield,我在前面的文章里已经发过了.那么yield是什 ...
- C#4.0中的dynamic关键字和ExpandoObject对象
dynamic最大的特点我想莫过于在它的类型在运行时才确定,这也是它与往静态类型关键字的最大区别.如果你在你的代码操作中用到了dynamic关键字去定义一个变量时,那么这个变量在编译的时候编译器不会对 ...
- C#中的foreach语句与枚举器接口(IEnumerator)及其泛型 相关问题
这个问题从<C#高级编程>数组一节中的foreach语句(6.7.2)发现的. 因为示例代码与之前的章节连贯,所以我修改了一下,把自定义类型改为了int int[] bs = { 2, 3 ...
- 探秘C#中的yield关键字
在"C#中,什么时候用yield return"中,我们了解到:使用yield return返回集合,不是一次性加载到内存中,而是客户端每调用一次就返回一个集合元素,是一种&quo ...
- C#中的yield关键字
迭代器,是一个连续的集合,出现多个yield return其实就是将这多个的yield return元素按照出现的顺序存储在迭代器的集合中而已.形如下面的形式: public class CityCo ...
随机推荐
- ubuntu命令查询版本和内核版本
1.查看ubuntu版本号: 方法一: cat /etc/issue 返回结果: Ubuntu 6.06.2 LTS \n \l 方法二: sudo lsb_release -a 返回结果: ...
- Python中wx.FlexGridSizer
FlexGridSizer是GridSizer的一个更灵活的版本.它与标准的GridSizer几乎相同,除了下面3点例外: 1.每行和每列可以有各自的尺寸.2.默认情况下,当尺寸调整时,它行和列整体改 ...
- Elasticsearch-sql 用SQL查询Elasticsearch
Elasticsearch的查询语言(DSL)真是不好写,偏偏查询的功能千奇百怪,filter/query/match/agg/geo各种各样,不管你是通过封装JSON还是通过python/java的 ...
- hiveQL求差集
hive sql求差集的方法 1.什么是差集 set1 - set2,即去掉set1中存在于set2中的数据. 2.hive中计算差集的方法,基本是使用左外链接. 直接上代码 select * fro ...
- jQuery Mobile 所有class选项,开发全解+完美注释
全栈工程师开发手册 (作者:栾鹏) jQuery Mobile事件全解 jQuery Mobile 所有class选项 jQuery Mobile 所有data-*选项 jQuery Mobile 所 ...
- win10 uwp 打开文件管理器选择文件
本文:让文件管理器选择文件,不是从文件管理器获得文件. 假如已经获得一些文件,那么如何从文件管理器选择这些文件? 使用方法很简单. 从网上拿图来说 打开文件夹自动选择所有文件 首先需要获得文件夹,因为 ...
- Spring装配bean
Spring配置的可选方案 Spring提供了如下三种装配机制: (1)在XML中显式配置 (2)在Java中显式配置 (3)隐式的bean发现机制和自动装配 Spring有多种方式可以装配bean, ...
- 浅析C#中单点登录的原理和使用
什么是单点登录?我想肯定有一部分人"望文生义"的认为一个用户只能在一处登录.其实这是错误的理解(我记得我第一次也是这么理解的).单点登录指的是多个子系统只需要登录一个,其他系统不需 ...
- Java常用API
常用Java API 一. java.io.BufferedReader类(用于从文件中读入一段字符:所属套件:java.io) 1. 构造函数BufferedReader(java.io.FileR ...
- 你真的懂offset与scroll吗?
背景 身为一个前端工程师,每次在做关于滚动或者定位之类的交互时,或多或少都会用到offset.scroll之类的元素属性值来计算距离,但是每次都是现用现百度,从来没有真正系统地弄明白其中的原理及用法: ...