博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 中的"yield"使用
阅读量:6679 次
发布时间:2019-06-25

本文共 2574 字,大约阅读时间需要 8 分钟。

 yield是C#为了简化遍历操作实现的语法糖,我们知道如果要要某个类型支持遍历就必须要实现系统接口IEnumerable,这个接口后续实现比较繁琐要写一大堆代码才能支持真正的遍历功能。举例说明

using System;using System.Collections.Generic;using System.Collections;using System.Linq;using System.Text;namespace{    class Program    {        static void Main(string[] args)        {            HelloCollection helloCollection = new HelloCollection();            foreach (string s in helloCollection)            {                Console.WriteLine(s);            }            Console.ReadKey();        }    }    //public class HelloCollection : IEnumerable    //{    //    public IEnumerator GetEnumerator()    //    {    //        yield return "Hello";    //        yield return "World";    //    }    //}    public class HelloCollection : IEnumerable    {        public IEnumerator GetEnumerator()        {            Enumerator enumerator = new Enumerator(0);            return enumerator;        }        public class Enumerator : IEnumerator, IDisposable        {            private int state;            private object current;            public Enumerator(int state)            {                this.state = state;            }            public bool MoveNext()            {                switch (state)                {                    case 0:                        current = "Hello";                        state = 1;                        return true;                    case 1:                        current = "World";                        state = 2;                        return true;                    case 2:                        break;                }                return false;            }            public void Reset()            {                throw new NotSupportedException();            }            public object Current            {                get { return current; }            }            public void Dispose()            {            }        }    }}

 上面注释的部分引用了"yield return”,其功能相当于下面所有代码!可以看到如果不适用yield需要些很多代码来支持遍历操作。

    yield return 表示在迭代中下一个迭代时返回的数据,除此之外还有yield break, 其表示跳出迭代,为了理解二者的区别我们看下面的例子

class A : IEnumerable{    private int[] array = new int[10];    public IEnumerator GetEnumerator()    {        for (int i = 0; i < 10; i++)        {            yield return array[i];        }    }}

   如果你只想让用户访问ARRAY的前8个数据,则可做如下修改.这时将会用到yield break,修改函数如下

public IEnumerator GetEnumerator(){    for (int i = 0; i < 10; i++)    {        if (i < 8)        {            yield return array[i];        }        else        {            yield break;        }    }}

    这样,则只会返回前8个数据.

转载于:https://www.cnblogs.com/ChineseMoonGod/p/5279511.html

你可能感兴趣的文章
HDS完成收购Pentaho 全力进军物联网和大数据分析领域
查看>>
中国航信借助NetApp存储系统打造高效数据中心
查看>>
增强加密是把双刃剑
查看>>
外媒:清理数据成数据科学家最大挑战
查看>>
《企业迁云实战》——第2章 2.0企业迁云概述
查看>>
载波聚合:保障LTE-A速率的有力武器
查看>>
WHID注入器:在无线环境下实现HID攻击的最新利器
查看>>
智能制造下徐工开启三大改造
查看>>
SOA减低成本提升效率的最有效的思想方法
查看>>
解读:云计算产业“钱”景
查看>>
思杰投资Vyatta 加强云计算基础设施
查看>>
React Native触摸事件处理详解
查看>>
运营商发力大数据,实现流量经营向大数据运营的创新转型
查看>>
大数据这么火,用途到底在哪?
查看>>
高温桑拿天如何让机房降温
查看>>
【博文推荐】如何做好大型数据中心的运维
查看>>
【最佳实践】如何使用云监控+日志服务快速完成故障发现和故障定位
查看>>
Windows 10更新车祸现场 老司机又要飙车了
查看>>
浪潮NF5568M4落地猿题库 让机器老师更智能
查看>>
Javascript设计模式理论与实战:桥接模式
查看>>