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关键字的更多相关文章

  1. 从yield关键字看IEnumerable和Collection的区别

    C#的yield关键字由来以久,如果我没有记错的话,应该是在C# 2.0中被引入的.相信大家此关键字的用法已经了然于胸,很多人也了解yield背后的“延迟赋值”机制.但是即使你知道这个机制,你也很容易 ...

  2. .NET中的yield关键字

    浅谈yield http://www.cnblogs.com/qlb5626267/archive/2009/05/08/1452517.html .NET中yield关键字的用法 http://bl ...

  3. 使用yield关键字让自定义集合实现foreach遍历

    一般来说当我们创建自定义集合的时候为了让其能支持foreach遍历,就只能让其实现IEnumerable接口(可能还要实现IEnumerator接口) 但是我们也可以通过使用yield关键字构建的迭代 ...

  4. C#的yield关键字

    using System; using System.Collections.Generic; using System.Reflection; using System.Text.RegularEx ...

  5. 从range和xrange的性能对比到yield关键字(中)

    上节提出了range和xrange的效率问题,这节我们来探究其中的原因   yield的使用   我们看下面的程序: #coding: utf-8 def test(): print 4 print ...

  6. (转) Python Generators(生成器)——yield关键字

    http://blog.csdn.net/scelong/article/details/6969276 生成器是这样一个函数,它记住上一次返回时在函数体中的位置.对生成器函数的第二次(或第 n 次) ...

  7. 转载yield关键字理解

    实现IEnumerable接口及理解yield关键字   [摘要]本文介绍实现IEnumerable接口及理解yield关键字,并讨论IEnumerable接口如何使得foreach语句可以使用. 本 ...

  8. yield关键字的用法

    在上一篇文章中,说了下foreach的用法,但是还是比较复杂的,要实现接口才能进行遍历,有没有简单些的方法呢?答案是肯定的.且看下面. yield关键字的用法: 1.为当前类型添加一个任意方法,但是要 ...

  9. yield 关键字和迭代器

    一般使用方法     yield 关键字向编译器指示它所在的方法是迭代器块 在迭代器块中,yield 关键字与 return 关键字结合使用,向枚举器对象提供值. 这是一个返回值,例如,在 forea ...

  10. C# 基础小知识之yield 关键字 语法糖

    原文地址:http://www.cnblogs.com/santian/p/4389675.html 对于yield关键字我们首先看一下msdn的解释: 如果你在语句中使用 yield 关键字,则意味 ...

随机推荐

  1. Hough transform(霍夫变换)

    主要内容: 1.Hough变换的算法思想 2.直线检测 3.圆.椭圆检测 4.程序实现 一.Hough变换简介 Hough变换是图像处理中从图像中识别几何形状的基本方法之一.Hough变换的基本原理在 ...

  2. CF1139E Maximize Mex

    题目地址:CF1139E Maximize Mex 这其实是一个二分图匹配匈牙利算法的巧妙运用 考虑倒序回答 则由原来的删除改为添加 把 potential 值作为左部,则一共有编号为 \(0~m\) ...

  3. Python 爬虫 NewCnblogs (爬虫-Django-数据分析)

    需求分析 数据库架构 注册 登录 首页 个人站点 文章+评论 后台 爬虫 数据分析 添加搜索+已上线

  4. 洛谷P5280 [ZJOI2019]线段树 [线段树,DP]

    传送门 无限Orz \(\color{black}S\color{red}{ooke}\)-- 思路 显然我们不能按照题意来每次复制一遍,而多半是在一棵线段树上瞎搞. 然后我们可以从\(modify\ ...

  5. unity读取txt,并且生成vector3的数组

    读取txt的脚本: public void ReadFileTX(){ var str = File.ReadAllText(Application.streamingAssetsPath + &qu ...

  6. 《剑指offer》连续子数组的最大和

    本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:

  7. Java Spring Boot VS .NetCore (一)来一个简单的 Hello World

    系列文章 Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filte ...

  8. Make Eudict for reviewing example sentences

    Recently, I've started an activity of recording typical and nice English sentences from dictionaries ...

  9. 后端for循环补充

    我们的for循环里面,在外面可以调用它最后一次循环的值,pycharm尽管会飘黄色,但是系统是可以识别出来的,能够调用,而且是循环最后一次的值

  10. 想对list里面的对象进行排序

    不必使用排序算法.实现Comparator接口就行