yield关键字
1.yield语句有两种形式
(1)yield return <expression>;一次返回一个元素
运行yield return 语句时,会返回一个 值,并记录当前位置及保留该值。下次调用迭代器函数时,将从该位置重新开始执行
(2)yield break;终止迭代
2.迭代器声明
(1) 返回类型必须为 IEnumerable、IEnumerable<T>、IEnumerator 或 IEnumerator<T>,或者IEnumerable、IEnumerator 的继承类
(2)声明不能有任何 in、ref 或 out 参数
3.yield关键字使用缺点
(1)匿名方法不能包含 yield return 或 yield break 语句
(2)被unsafe(不安全)修饰的方法不能使用yield关键字
4.异常处理
(1)yield return语句不能置于try-catch块,既不能放在try块也不能放在catch块
(2)yield return 语句可以置于try-finally语句try块,能放在try块但不能放在finally块
(3)yield break语句可以置于try块和catch块,不能置于finally块
(4)如果 foreach 主体(在迭代器方法之外)引发异常,则将执行迭代器方法中的 finally 块
5.打印集合中的元素
(1)直接打印集合中的元素
static void Main(string[] args)
{
foreach (var item in GetMultiplyNoYield(,))
{
Console.WriteLine("{0}", item);
}
Console.ReadKey();
} /// <summary>
/// 不使用yield
/// </summary>
/// <param name="number"></param>
/// <param name="exponent"></param>
/// <returns></returns>
public static IEnumerable<int> GetMultiplyNoYield(int number,int exponent)
{
List<int> list = new List<int>();
int result = ;
for (int i = ; i < exponent; i++)
{
result = result * number;
list.Add(result);
}
return list;
}
(2)使用yield简化版
static void Main(string[] args)
{
foreach (var item in GetMultiplyHasYield(, ))
{
Console.WriteLine("{0}", item);
}
Console.ReadKey();
} /// <summary>
/// 使用yield
/// </summary>
/// <param name="number"></param>
/// <param name="exponent"></param>
/// <returns></returns>
private static IEnumerable<int> GetMultiplyHasYield(int number,int exponent)
{
int result = ; for (int i = ; i < exponent; i++)
{
result = result * number;
yield return result;
}
}
yield关键字的更多相关文章
- 从yield关键字看IEnumerable和Collection的区别
C#的yield关键字由来以久,如果我没有记错的话,应该是在C# 2.0中被引入的.相信大家此关键字的用法已经了然于胸,很多人也了解yield背后的“延迟赋值”机制.但是即使你知道这个机制,你也很容易 ...
- .NET中的yield关键字
浅谈yield http://www.cnblogs.com/qlb5626267/archive/2009/05/08/1452517.html .NET中yield关键字的用法 http://bl ...
- 使用yield关键字让自定义集合实现foreach遍历
一般来说当我们创建自定义集合的时候为了让其能支持foreach遍历,就只能让其实现IEnumerable接口(可能还要实现IEnumerator接口) 但是我们也可以通过使用yield关键字构建的迭代 ...
- C#的yield关键字
using System; using System.Collections.Generic; using System.Reflection; using System.Text.RegularEx ...
- 从range和xrange的性能对比到yield关键字(中)
上节提出了range和xrange的效率问题,这节我们来探究其中的原因 yield的使用 我们看下面的程序: #coding: utf-8 def test(): print 4 print ...
- (转) Python Generators(生成器)——yield关键字
http://blog.csdn.net/scelong/article/details/6969276 生成器是这样一个函数,它记住上一次返回时在函数体中的位置.对生成器函数的第二次(或第 n 次) ...
- 转载yield关键字理解
实现IEnumerable接口及理解yield关键字 [摘要]本文介绍实现IEnumerable接口及理解yield关键字,并讨论IEnumerable接口如何使得foreach语句可以使用. 本 ...
- yield关键字的用法
在上一篇文章中,说了下foreach的用法,但是还是比较复杂的,要实现接口才能进行遍历,有没有简单些的方法呢?答案是肯定的.且看下面. yield关键字的用法: 1.为当前类型添加一个任意方法,但是要 ...
- yield 关键字和迭代器
一般使用方法 yield 关键字向编译器指示它所在的方法是迭代器块 在迭代器块中,yield 关键字与 return 关键字结合使用,向枚举器对象提供值. 这是一个返回值,例如,在 forea ...
- C# 基础小知识之yield 关键字 语法糖
原文地址:http://www.cnblogs.com/santian/p/4389675.html 对于yield关键字我们首先看一下msdn的解释: 如果你在语句中使用 yield 关键字,则意味 ...
随机推荐
- Python3:字符串的大小写和镜像字符串(swapcase()函数,chr(),ord(),translate()函数)
题目: 请编程实现字符串的转换:1. 将"adsdsfdndsdsdfsfdsdASDSDEDSFE18754"字符串大写变小写,小写变大写:2. 并且将字符串变为镜像字符串,例如 ...
- 老师博客copy -高阶函数2
新闻 管理 Py西游攻关之函数 一 函数是什么? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法.在B ...
- 行为驱动:Cucumber + Selenium + Java(一) - Cucumber简单操作实例
场景(Scenarios) 场景是Cucumber结构的核心之一.每个场景都以关键字“Scenario:”(或本地化一)开头,后面是可选的场景标题.每个Feature可以有一个或多个场景,每个场景由一 ...
- java 获取用户ip
JSP里,获取客户端的IP地址的方法是: request.getRemoteAddr() 这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
- RabbitMQ 消息队列 二
一:查看MQ的用户角色 rabbitmqctl list_users 二:添加新的角色,并授予权限 rabbitmqctl add_user xiaoyao 123456 rabbitmqctl se ...
- SSL双向认证和SSL单向认证的流程和区别
refs: SSL双向认证和SSL单向认证的区别https://www.jianshu.com/p/fb5fe0165ef2 图解 https 单向认证和双向认证!https://cloud.tenc ...
- Java Spring Boot VS .NetCore (十) Java Interceptor vs .NetCore Interceptor
Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...
- Web服务器原理
——————————什么是Web服务器 Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档.目前最主流的三个Web服务器是Apache Ngin ...
- matplotlib等高线图-【老鱼学matplotlib】
等高线图是在地理课中讲述山峰山谷时绘制的图形,在机器学习中也会被用在绘制梯度下降算法的图形中. 因为等高线的图有三个信息:x, y以及x,y所对应的高度值. 这个高度值的计算我们用一个函数来表述: # ...
- shullfe机制详解
一.shuffle机制概述 shuffle机制就是发生在MR程序中,Mapper之后,Reducer之前的一系列分区排序的操作.shuffle的作用是为了保证Reducer收到的数据都是按键排序的. ...