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

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

一、C#中yield关键字用于遍历循环中,yield语句的两种形式

yield return用于返回IEnumerable<T>,

yield break用于终止循环遍历。

 

二、yield return的用法

使用yield return获取集合,并遍历。

 
C# 代码   
复制
class Program
{        public static Random r = new Random();        static IEnumerable
GetList(int count){ for (int i = 0; i < count; i++){ yield return r.Next(10); } } static void Main(string[] args){ foreach(int item in GetList(5)) Console.WriteLine(item); Console.ReadKey(); } }

 

生成项目,并用反编译可执行文件。查看GetList方法,发现该方法返回的是一个GetList类的实例。原来yield return是"语法糖",其本质是生成了一个GetList的实例。

 

yield return的用法

 

那GetList实例是什么呢?点击反编译工具中<GetList>链接查看

 

yield return的用法

 

分析代码后可以知道

1、原来GetList类实现了IEnumerable和IEnumerator的泛型、非泛型接口 2、yield return返回的集合之所以能被迭代、遍历,是因为GetList内部有迭代器 3、yield return之所以能实现"按需供给",是因为GetList内部有一个_state字段记录这上次的状态 

 

三、yield break的用法

使用yield break可以在获取集合的时候,当符合某种条件就终止获取集合。

 
C# 代码   
复制
class Program
{        static Random rand = new Random();        static IEnumerable
GetList(){ while (true){ int temp = rand.Next(100); if (temp%10 == 0){ yield break; } yield return temp; } } static void Main(string[] args){ foreach (int item in GetList()){ Console.WriteLine(item); } Console.ReadKey(); } }

 

四、C#中yield关键字的总结

 

1、yield return能返回一个"按需供给"的集合 2、yield return是"语法糖",其背后是一个实现了IEnuerable,IEnumerator泛型、非泛型接口的类,该类维护着一个状态字段,以保证yield return产生的集合能"按需供给" 3、yield break配合yield return使用,当产生集合达到某种条件的时候使用yield break,以终止继续创建集合

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

你可能感兴趣的文章
SDRAM 学习笔记(一)
查看>>
Android开发日记(七)
查看>>
Python多线程
查看>>
c++ 动态分配二维数组 new 二维数组
查看>>
在source insight中集成astyle
查看>>
一个canonical标签解决site不在首页的问题
查看>>
[Hibernate开发之路](2)Hibernate问题
查看>>
HDU - 4118 Holiday&#39;s Accommodation
查看>>
函数式编程——C#理解
查看>>
java数组或集合返回空的问题
查看>>
【转】gc日志分析工具
查看>>
java多线程系列2-线程控制
查看>>
godep 包管理工具
查看>>
爬虫工程师要求
查看>>
Linux 远程查看tomcat控制台
查看>>
【转】七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)...
查看>>
[转] “error LNK2019: 无法解析的外部符号”之分析
查看>>
演示-JQuery关系选择器
查看>>
微信支付接口之jsApiPay教程
查看>>
C#十种语法糖
查看>>