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 关键字,则意味 ...
随机推荐
- 基于redis的IP地址快速查询
在一些大数据处理中,我们需要用到IP地址查询,一般为了查询一个IP属于哪个地址,我们通常需要根据一个IP数据库来查询,网络上比较常用的IP库是纯真IP数据库.IP数据库里面的记录一般存储方式为IP的开 ...
- elecworks 报表----按线类型的电线清单
按线类型的电线清单中:列Wire number指的是线标注,不是电位标注 section:截面积
- 如何获得JVM执行过程中调用的方法名
这应该分成两个问题,1.如何获取参数值. 2.如何获取参数名, 1.如何获取参数值.这个是运行时的数据,你程序处理下获取就好了.比如写一个代理 2.参数名是在编译的时候就写入到class文件的.,而这 ...
- Mysql之二
MySQL的数据类型 SQL接口 标准: ANSI SQL:SQL-86--------SQL-89--------SQL-99---------SQL-03 数据类型 字符型: CHAR(不区分字母 ...
- 【STL源码学习】STL算法学习之三
第一章:前言 数量不多,用到的时候会很爽. 第二章:明细 STL算法中的又一个分类:分割:将已有元素按照既定规则分割成两部分. is_partitioned 函数原型: template <c ...
- metasploit(MSF)终端命令大全
show exploits 列出metasploit框架中的所有渗透攻击模块. show payloads 列出metasploit框架中的所有攻击载荷. show auxiliary 列 ...
- python会什么比c慢
众所周知,python执行速度比c慢.原因为何? 先来看下面这张图: python的传统运行执行模式:录入的源代码转换为字节码,之后字节码在python虚拟机中运行.代码自动被编译,之后再解释成机器码 ...
- 笔记本禁用自带键盘攻略-------针对shift默认按下的解决方案
长期以来楼主一直被一个问题困扰,就是win8进入界面,输密码时开大写其实是小写,开小写是大写.进入系统以后shift键是默认按下的.一直以为是电脑中毒了.上网查了一些东西,发现可能是因为键盘硬件方面的 ...
- OpenCV Mat 类型定义和赋值
1.一般的Mat定义方法:cv::Mat M(height,width,<Type>),例: cv::Mat M(480,640,CV_8UC3); 表示定义了一个480行640列的矩阵, ...
- Android下实现GPS定位服务
1.申请Google API Key,参考前面文章 2.实现GPS的功能需要使用模拟器进行经纬度的模拟设置,请参考前一篇文章进行设置 3.创建一个Build Target为Google APIs的项目 ...