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# #define条件编译
- C#获取页面的HTML
- C#正则表达式Regex类的用法
- C# 获取磁盘空间大小
- C#中的反射
- C#enum枚举
- C#中Dispose、析构函数、close的区别
- C#操作datatable
- C#中Obsolete
- c# Invoke和BeginInvoke 区别
- C#中Serializable序列化
- C# File类的操作
- C#不建议在构造函数中调用虚方法或虚属性
- C#中string.format的格式和用法
- C#选择排序
- 王伦狭隘,晁盖霸道,宋江奸诈骨头软,只有鲁智深才适合当寨主(王伦狭隘晁盖霸道)
- 他是梁山最早的头目,江湖人称 旱地忽律 ,宋江几乎将其遗忘(他是梁山最早的头目)
- 梁山创始人杜迁,为何不受宋江待见,只排名83位(梁山创始人杜迁)
- 法国面包(法国面包法棍)
- 微信(微信分身)
- 双十二(双十二和双十一哪个划算)
热门推荐
- xampp安装后启动apache弹出对话框(XAMPP下使用顶级域名绑定虚拟主机的配置方法和示例)
- extjs中Toolbar工具栏
- apache虚拟域名配置(Apache虚拟主机的配置和泛域名解析实现代码)
- python中函数最少能定义几个参数(Python函数中不定长参数的写法)
- dede联动菜单样式(dede标签云如何生成不同颜色、不同大小的tag标签)
- sql server批量导出数据(SQL Server 批量插入数据的完美解决方案)
- docker镜像配置教程(给Docker更换国内镜像源操作)
- php最好的探针(php探针不显示内存解决方法)
- 微信小程序多人编辑表格(微信小程序实现固定表头、列表格组件)
- 怎样使用python图像处理(Python Image模块基本图像处理操作小结)