yield关键字的用法
在上一篇文章中,说了下foreach的用法,但是还是比较复杂的,要实现接口才能进行遍历,有没有简单些的方法呢?答案是肯定的。且看下面。
yield关键字的用法:
1.为当前类型添加一个任意方法,但是要求该方法的返回值类型必须是IEnumerable:<代码1-1>
class Person
{
public string Name { get; set; }
public int Age { get; set; } public string[] _Name = new string[] { "zxh", "jk", "ml", "wcw", "sk", "yzk" }; public IEnumerable<string> GetEnumerableObject()
{
for (int i = ; i < _Name.Length; i++)
{
yield return _Name[i];
}
}
}
遍历的方法如下:<代码1-2>
Person p1 = new Person();
foreach (var item in p1.GetEnumerableObject())
{
Console.WriteLine(item);
}
Console.ReadKey();
2.为当前类型添加一个GetEnumerator()方法,返回值类型是IEnumerator.<代码1-3>
class Person
{
public string Name { get; set; }
public int Age { get; set; } public string[] _Name = new string[] { "zxh", "jk", "ml", "wcw", "sk", "yzk" }; //为当前类型添加一个GetEnumerator()方法,返回值类型是IEnumerator.
public IEnumerator<string> GetEnumerator()
{
for (int i = ; i < _Name.Length; i++)
{
yield return _Name[i]; //yield break;则跳出循环。
}
}
}
遍历的方法如下:<代码1-4>
Person p1 = new Person();
foreach (var item in p1)
{
Console.WriteLine(item);
}
Console.ReadKey();
yield break的用法,我们在代码1-3修改一下:<代码1-5>
class Person
{
public string Name { get; set; }
public int Age { get; set; } public string[] _Name = new string[] { "jk", "ml","zxh", "wcw", "sk", "yzk" }; //为当前类型添加一个GetEnumerator()方法,返回值类型是IEnumerator.
public IEnumerator<string> GetEnumerator()
{
for (int i = ; i < _Name.Length; i++)
{
if (_Name[i] == "zxh")
{
yield break; //跳出循环
}
else
{
yield return _Name[i];
}
}
}
}
当再执行<代码1-4>时,会发现遍历到zxh,程序退出。运行结果如下:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAvCAIAAADijDRIAAAAiElEQVRYhe3UQQrAIAwEwPz/VfuKfqaXHgpFTGxNSKgtuydFyGgUZa+P0KDxE2MriGFIemhkGQAAtONrWmLoaY7RJdlAE9NweLFe+Q4UMNwdW/Qc5pLPGBXqulRixGP2Kni3LiM5ND5slPwlN9LyBlSqjLOWWZHGO4au+PgcZg3HBidDgwaNYQ7bdOx69vXi3QAAAABJRU5ErkJggg==" alt="" />
通过方法二的实现,就可以直接遍历你的自定义对象了。
yield关键字的用法的更多相关文章
- c# 递归 yield关键字的用法
1.yield实现的功能 yield return: 先看下面的代码,通过yield return实现了类似用foreach遍历数组的功能,说明yield return也是用来实现迭代器的功能的. u ...
- .NET中的yield关键字
浅谈yield http://www.cnblogs.com/qlb5626267/archive/2009/05/08/1452517.html .NET中yield关键字的用法 http://bl ...
- c# yield关键字原理详解
c# yield关键字的用法 1.yield实现的功能 yield return: 先看下面的代码,通过yield return实现了类似用foreach遍历数组的功能,说明yield return也 ...
- C# 中yield关键字解析
前言 前段时间了解到yield关键字,一直觉得还不错.今天给大家分享一下yield关键字的用法.yield return 返回集合不是一次性返回所有集合元素,而是一次调用返回一个元素.具体如何使用yi ...
- yield关键字用法与解析(C# 参考)
yield 关键字向编译器指示它所在的方法是迭代器块. 编译器生成一个类来实现迭代器块中表示的行为. 在迭代器块中,yield 关键字与 return 关键字结合使用,向枚举器对象提供值. 这是一个返 ...
- yield关键字详解与三种用法
本篇文章比较硬核, 适合有一定Python基础的读者阅读, 如果您对Python还不甚了解可以先关注我哦, 我会持续更新Python技术文章 yield详解 yield与return相同每次调用都会返 ...
- 从yield关键字看IEnumerable和Collection的区别
C#的yield关键字由来以久,如果我没有记错的话,应该是在C# 2.0中被引入的.相信大家此关键字的用法已经了然于胸,很多人也了解yield背后的“延迟赋值”机制.但是即使你知道这个机制,你也很容易 ...
- C#的yield关键字
using System; using System.Collections.Generic; using System.Reflection; using System.Text.RegularEx ...
- C# 基础小知识之yield 关键字 语法糖
原文地址:http://www.cnblogs.com/santian/p/4389675.html 对于yield关键字我们首先看一下msdn的解释: 如果你在语句中使用 yield 关键字,则意味 ...
随机推荐
- ubuntu无法进入和引导顺序问题解决
今天上班过来发现ubuntu无法进入,因为里面有N多资料没有备份,当时很是捉急.不过后来都解决了: 背景: easyBCD安装ubuntu14.07和windows7双系统.基本上这一年多一直用ubu ...
- Delphi给窗体镶边-为控件加边框,描边,改变边框颜色
PS:因为我现在用的电脑是WIN7 64位系统,所以没有实现功能,不知道XP是否可行. //1.定义方法 procedure WMNCPaint(var Msg : TWMNCPaint); mess ...
- iOS几个效果动画-------------------(实例详讲)qq粘性效果
这几天做了一些简单iOS的效果图,感觉苹果官方已经帮我们做了很多了,我们只是站在巨人的肩膀上编程,这些也没什么难的,最难的也就是用到了初中的三角函数,先让大家看看这几个动画吧.先列这几个把,由上而下分 ...
- HDU2177:取(2堆)石子游戏(威佐夫博弈)
Problem Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同 ...
- HDU 2112 HDU Today -- from lanshui_Yang
此题主要是要用到字符串向整数的映射 , 很自然的想到了 STL 中的map ,哎,贡献无数次WA,最后才发现每次运行时 map 忘了清空 !!!!本题,用dijkstra 和 spfa 均可 ,但是要 ...
- 如何调试libc++abi.dylib handler threw exception错误
From:http://blog.csdn.net/naruto_ku/article/details/8779203 在进行iOS开发时,偶尔会碰到libc++abi.dylib handler t ...
- BZOJ 2257: [Jsoi2009]瓶子和燃料 裴蜀定理
2257: [Jsoi2009]瓶子和燃料 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- 【JSP】Cookie的使用及保存中文,并用Cookie实现购物车功能
Cookie是服务器存放在客户端的一些数据,比如密码,以及你曾经访问过的一些数据. 设置Cookie //设置cookie Cookie cookie = new Cookie("TOM&q ...
- java基础复习之对于String对象,能够使用“=”赋值,也能够使用newkeyword赋值,两种方式有什么差别?
String类型是实际工作中经经常使用到的类型,从数据类型上划分,String是一个引用类型,是API中定义的一个类.所以String类型的对象能够用new创建,比如String name=new S ...
- windows MySQL 5+ 服务手动安装
一.手动安装mysql 1.准备一个mysql免安装版本(把原来安装好的版本复制一份即可.一次安装多次使用^_^),将mysql复制到指定目录. 2.配置my.ini文件(本例使用的是5.0.22版本 ...