C#中yield关键字
来源:互联网 发布:php安装memcache扩展 编辑:程序博客网 时间:2024/06/08 15:10
yield关键字向编译器指示它所在的方法是迭代器块。编译器生成一个类来实现迭代器块中标的行为。
在迭代器中,yieId关键字与return关键字结合使用,向枚举器对象提供值。这是一个返回值,例如,在foreach语句的每一次循环中返回的值。yieid关键字也可与break结合使用,表示迭代结束。
using System.Collections;namespace Chap5Demo{ public class LinkedList : IEnumerable { public LinkedListNode First { get; private set; } public LinkedListNode Last { get; private set; } public LinkedListNode AddLast(object node) { var newNode = new LinkedListNode(node); if (First==null) { First = newNode; newNode.Prev = Last; Last = First; } else { LinkedListNode Previous = Last; Last.Next = newNode; Last = newNode; Last.Prev = Previous; } return newNode; } public IEnumerator GetEnumerator() { LinkedListNode current = First; while (current!=null) { //返回循环中的值 yield return current.Value; current = current.Next; } } } public class LinkedListNode { public object Value { get; private set; } public LinkedListNode(object value) { this.Value = value; } public LinkedListNode Next { get; internal set; } public LinkedListNode Prev { get; internal set; } }}
在yieid return语句中,将计算expression并将结果以值的形式放回给枚举器对象。
在yieid return语句中,控制权将无条件地返回给迭代器的调用方,该调用方枚举器对象的 IEnumerator.MoveNext 方法(或其对应的泛型 System.Collections.Generic.IEnumerable)或 Dispose 方法。
yield 语句只能出现在 iterator 块中,这种块可作为方法、运算符或访问器的主体实现。这类方法、运算符或访问器的体受以下约束的控制:
不允许不安全块。
方法、运算符或访问器的参数不能是 ref 或 out。
yield return 语句不能放在 try-catch 块中的任何位置。该语句可放在后跟 finally 块的 try 块中。
yield break 语句可放在 try 块或 catch 块中,但不能放在 finally 块中。
yield 语句不能出现在匿名方法中。有关更多信息,请参见匿名方法(C# 编程指南)。
当和 expression 一起使用时,yield return 语句不能出现在 catch 块中或含有一个或多个 catch 子句的 try 块中。
转自“停留的风”
(侵删)
阅读全文
0 0
- C#中yield关键字
- C# 中 yield return 和 yield break 关键字的用法
- C# 中 yield return 和 yield break 关键字的用法
- C#中yield关键字及注意事项
- C#关键字之yield
- C#中的yield关键字
- C#关键字之yield
- C# yield 关键字
- 关键字 yield in C#
- C# yield关键字
- C# yield 关键字 使用
- C#中的yield关键字
- c#中的yield关键字
- C#中的yield关键字
- C# yield关键字详解
- C#关键字—yield
- 【C#学习】yield关键字
- C#关键字之yield(迭代器)
- 关于java多参数的传值问题解析
- 谷歌大神为你解释Kubernetes, 微服务和容器化
- 典型相关性学习
- Cookie的设置和获取
- ionic基本语法
- C#中yield关键字
- Windows菜单
- 二叉树的递归遍历(思路简单清晰)
- java容器
- git,svn,github,码云之间联系区别
- 大型网站技术架构笔记-第1篇 概述(3)
- VS2010 EntityFrame跨数据库
- iOS Runtime详解之SEL,Class,id,IMP,_cmd,isa,method,Ivar
- Oracle分页实现原理