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

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

 

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

1 using System; 2 using System.Collections.Generic; 3 using System.Collections; 4 using System.Linq; 5 using System.Text; 6  7 namespace 8 { 9     class Program10     {11         static void Main(string[] args)12         {13             HelloCollection helloCollection = new HelloCollection();14             foreach (string s in helloCollection)15             {16                 Console.WriteLine(s);17             }18 19             Console.ReadKey();20         }21     }22 23     //public class HelloCollection : IEnumerable24     //{25     //    public IEnumerator GetEnumerator()26     //    {27     //        yield return "Hello";28     //        yield return "World";29     //    }30     //}31 32     public class HelloCollection : IEnumerable33     {34         public IEnumerator GetEnumerator()35         {36             Enumerator enumerator = new Enumerator(0);37             return enumerator;38         }39 40         public class Enumerator : IEnumerator, IDisposable41         {42             private int state;43             private object current;44 45             public Enumerator(int state)46             {47                 this.state = state;48             }49 50             public bool MoveNext()51             {52                 switch (state)53                 {54                     case 0:55                         current = "Hello";56                         state = 1;57                         return true;58                     case 1:59                         current = "World";60                         state = 2;61                         return true;62                     case 2:63                         break;64                 }65                 return false;66             }67 68             public void Reset()69             {70                 throw new NotSupportedException();71             }72 73             public object Current74             {75                 get { return current; }76             }77 78             public void Dispose()79             {80             }81         }82     }83 }

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

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

1 class A : IEnumerable 2 { 3     private int[] array = new int[10]; 4  5     public IEnumerator GetEnumerator() 6     { 7         for (int i = 0; i < 10; i++) 8         { 9             yield return array[i];10         }11     }12 }

 

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

1 public IEnumerator GetEnumerator() 2 { 3     for (int i = 0; i < 10; i++) 4     { 5         if (i < 8) 6         { 7             yield return array[i]; 8         } 9         else10         {11             yield break;12         }13     }14 }

 

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

 

转载地址:http://fvivx.baihongyu.com/

你可能感兴趣的文章
Oracle:Authid Current_User的使用
查看>>
陈天桥:欣赏360保护隐私 用户安全永远第一
查看>>
JMeter使用技巧
查看>>
【Jump Game II 】cpp
查看>>
ubuntu 下 apache+tomcat整合_(mod-jk方法)[转]
查看>>
记录编译Hi3559A时遇到的一些错误和解决方法
查看>>
iis6 zencart1.39 伪静态规则
查看>>
Python学习之路7——深浅拷贝剖析
查看>>
宁波竞赛题
查看>>
Java实现Socket5代理服务器
查看>>
Android-异步图像装载机
查看>>
MySQL学习笔记——安装及配置环境
查看>>
SQL Server代理(3/12):代理警报和操作员
查看>>
android 物理按键 监听
查看>>
Do You Kown Asp.Net Core - 根据实体类自动创建Razor Page CURD页面模板
查看>>
npm 主要命令
查看>>
csrf攻击原理及如何防止csrf攻击
查看>>
C# Data Parse
查看>>
用EntityFramework6完成增删查改和事务【转】
查看>>
Windows Community Toolkit 3.0 - InfiniteCanvas
查看>>