C#中yield
C#中yield
C#中yield一、C#中yield关键字用于遍历循环中,yield语句的两种形式
yield return用于返回IEnumerable<T>,
yield break用于终止循环遍历。
二、yield return的用法
使用yield return获取集合,并遍历。
class Program
{
public static Random r = new Random();
static IEnumerable<int> 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的实例。
那GetList实例是什么呢?点击反编译工具中<GetList>链接查看
分析代码后可以知道
1、原来GetList类实现了IEnumerable和IEnumerator的泛型、非泛型接口
2、yield return返回的集合之所以能被迭代、遍历,是因为GetList内部有迭代器
3、yield return之所以能实现"按需供给",是因为GetList内部有一个_state字段记录这上次的状态
三、yield break的用法
使用yield break可以在获取集合的时候,当符合某种条件就终止获取集合。
class Program
{
static Random rand = new Random();
static IEnumerable<int> 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,以终止继续创建集合
- C#压缩图片不失真
- C# string 和 stringbuilder 的区别
- C#中is、as的区别
- c语言获取系统日期函数(C# ling to sql 取多条记录最大时间)
- C#中Serializable序列化
- C#快速排序
- C#enum枚举
- C# volatile与lock
- C#中默认参数
- C#中SortedList的用法
- C#中字符串转换成日期
- C# 扩展方法
- C#中ICollection介绍
- C#中static静态变量的用法
- C#排序算法的比较
- 安装C# Windows服务需要“设置服务登录”
- 以后显卡多了一个新选择,N卡和A卡外又多了个I卡(以后显卡多了一个新选择)
- 读卖乐园的彩灯(读卖乐园的彩灯)
- 新疆80后在淘宝卖干果 以前是 不务正业 如今帮乡亲致富(新疆80后在淘宝卖干果)
- 弄清楚了销 售 买 卖这四个字,母婴生意做起来就没那么难了(弄清楚了销售买)
- 数读 买首饰金是 投资黄金 吗 买金容易卖金难(数读买首饰金是)
- 销 售 买 卖 你真的了解这四个字了吗(销售买)
热门推荐
- Http协议头信息
- vue本地图片切换(vue动态加载本地图片的处理方法)
- mysql字符串截取字段(MySQL如何从不固定位置提取字符串元素详解)
- docker部署php本地开发环境(CentOS7环境下使用Docker搭建PHP运行环境的过程详解)
- 阿里云服务器ecs入口(阿里云ECS云服务器更换公网IP的方法)
- 阿里云ubuntu系统(阿里云ubuntu16.04如何搭建pptpd服务)
- jsforeach语句(JS面试题之forEach能否跳出循环详解)
- canvas怎么画特效(canvas中普通动效与粒子动效的实现代码示例)
- 使用Console调试js脚本
- 列举服务器网络防御措施(如何对Web服务器进行飓风级防御)