yield关键字的用法

在上一篇文章中,说了下foreach的用法,但是还是比较复杂的,要实现接口才能进行遍历,有没有简单些的方法呢?答案是肯定的。且看下面。

yield关键字的用法:

1.为当前类型添加一个任意方法,但是要求该方法的返回值类型必须是IEnumerable:<代码1-1>

 1     class Person
 2     {
 3         public string Name { get; set; }
 4         public int Age { get; set; }
 5
 6         public string[] _Name = new string[] { "zxh", "jk", "ml", "wcw", "sk", "yzk" };
 7
 8         public IEnumerable<string> GetEnumerableObject()
 9         {
10             for (int i = 0; i < _Name.Length; i++)
11             {
12                 yield return _Name[i];
13             }
14         }
15     }

遍历的方法如下:<代码1-2>

1            Person p1 = new Person();
2             foreach (var item in p1.GetEnumerableObject())
3             {
4                 Console.WriteLine(item);
5             }
6             Console.ReadKey();

2.为当前类型添加一个GetEnumerator()方法,返回值类型是IEnumerator.<代码1-3>

 1    class Person
 2     {
 3         public string Name { get; set; }
 4         public int Age { get; set; }
 5
 6         public string[] _Name = new string[] { "zxh", "jk", "ml", "wcw", "sk", "yzk" };
 7
 8         //为当前类型添加一个GetEnumerator()方法,返回值类型是IEnumerator.
 9         public IEnumerator<string> GetEnumerator()
10         {
11             for (int i = 0; i < _Name.Length; i++)
12             {
13                 yield return _Name[i];      //yield break;则跳出循环。
14             }
15         }
16     }

遍历的方法如下:<代码1-4>

1            Person p1 = new Person();
2             foreach (var item in p1)
3             {
4                 Console.WriteLine(item);
5             }
6             Console.ReadKey();
yield break的用法,我们在代码1-3修改一下:<代码1-5>
 1 class Person
 2     {
 3         public string Name { get; set; }
 4         public int Age { get; set; }
 5
 6         public string[] _Name = new string[] {  "jk", "ml","zxh", "wcw", "sk", "yzk" };
 7
 8         //为当前类型添加一个GetEnumerator()方法,返回值类型是IEnumerator.
 9         public IEnumerator<string> GetEnumerator()
10         {
11             for (int i = 0; i < _Name.Length; i++)
12             {
13                 if (_Name[i] == "zxh")
14                 {
15                     yield break;  //跳出循环
16                 }
17                 else
18                 {
19                     yield return _Name[i];
20                 }
21             }
22         }
23     }

当再执行<代码1-4>时,会发现遍历到zxh,程序退出。运行结果如下:

通过方法二的实现,就可以直接遍历你的自定义对象了。

yield关键字的用法

时间: 2024-08-05 11:00:17

yield关键字的用法的相关文章

.NET中的yield关键字

浅谈yield http://www.cnblogs.com/qlb5626267/archive/2009/05/08/1452517.html .NET中yield关键字的用法 http://blog.csdn.net/aspnet2002web/article/details/6083417 When you use the yield keyword in a statement, you indicate that the method, operator, or get access

c# yield关键字原理详解

c# yield关键字的用法 1.yield实现的功能 yield return: 先看下面的代码,通过yield return实现了类似用foreach遍历数组的功能,说明yield return也是用来实现迭代器的功能的. using static System.Console; using System.Collections.Generic; class Program { //一个返回类型为IEnumerable<int>,其中包含三个yield return public stat

ruby yield 关键字用法实例

yield关键字我是这样理解,用它来占一个位置,先标记下这个地方将来要写代码的,等到调用的时候,再来编写具体的代码.有点像函数指针,或者C#里的委托,但其实并不太一样. 写测试接口的时候,每次的assert返回值不一样,但函数体大部分是相同的,只有参数不同.正好最近看到了yield,就熟悉一下用法,可以把assert这部分code写在yield 的位置. 例子主要就是test_nodes这个函数的定义 和 它的调用. Code: 1 def generate_nodes(n=3) 2 retur

yield关键字详解与三种用法

本篇文章比较硬核, 适合有一定Python基础的读者阅读, 如果您对Python还不甚了解可以先关注我哦, 我会持续更新Python技术文章 yield详解 yield与return相同每次调用都会返回一个值, 不同的是return返回值后会直接结束函数执行, 而yeild则是返回值后冻结函数执行, 下次调用此函数会从冻结处开始执行 (冻结就是保存函数状态, 所有的局部变量与执行状态都会被保留) yield语法 send参数 yield 返回值 语法分为三个部分, 除yield关键字外其它两个部

C#中yield关键字理解

yield关键字之前用得较少,但是在做项目开发的过程中也遇到了,当时有点迷惑,就顺便研究学习了一下,以下是个人理解,不到之处欢迎拍砖!废话就到这,上代码: class Program { static void Main(string[] args) { string[] strs = new string[] { "1", "2", "3", "4" }; foreach (var item in GetInts(strs)

python yield 关键字

最近看代码看到python里面的yield关键字,和我之前接触的语言好像都没有来着,我就查了查它的含义,大概理解如下: >>> def createGenerator(): ... mylist = range(3) ... for i in mylist: ... yield i*i ... >>> mygenerator = createGenerator() # create a generator >>> print(mygenerator)

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

C#的yield关键字由来以久,如果我没有记错的话,应该是在C# 2.0中被引入的.相信大家此关键字的用法已经了然于胸,很多人也了解yield背后的“延迟赋值”机制.但是即使你知道这个机制,你也很容易在不经意间掉入它制造的陷阱. 目录 一.一个很简单的例子 二.简单谈谈“延迟赋值” 三.从反射的代码帮助我们更加直接的了解yield导致的延迟赋值 四.如果需要“立即赋值”怎么办? 后记 一.一个很简单的例子 下面是一个很简单的例子:Vector为自定义表示二维向量的类型,Program的静态方法G

python_递归_协程函数(yield关键字)_匿名函数_模块

协程函数(yield) 协程函数:生成器:yield关键字的另一种用法 例:装饰器自动初始化函数(生成器函数)deco 1 yield的语句形式: yield 1 2 #yield的表达式形式: x=yield 3 4 5 6 #协程函数 7 8 def deco(func): 9 def wrapper(*args,**kwargs): 10 res=func(*args,**kwargs) 11 next(res) 12 return res 13 return wrapper 14 15

C# 基础小知识之yield 关键字

对于yield关键字我们首先看一下msdn的解释: 如果你在语句中使用 yield 关键字,则意味着它在其中出现的方法.运算符或 get 访问器是迭代器. 通过使用 yield 定义迭代器,可在实现自定义集合类型的 IEnumerable 和 IEnumerator 模式时无需其他显式类(保留枚举状态的类,有关示例,请参阅 IEnumerator<T>). yield是一个语法糖 看msdn 的解释总是让人感觉生硬难懂.其实yield关键字很好理解.首先我们对于性质有个了解.yield是一个语