在上一篇文章中,说了下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关键字的用法的更多相关文章

  1. c# 递归 yield关键字的用法

    1.yield实现的功能 yield return: 先看下面的代码,通过yield return实现了类似用foreach遍历数组的功能,说明yield return也是用来实现迭代器的功能的. u ...

  2. .NET中的yield关键字

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

  3. c# yield关键字原理详解

    c# yield关键字的用法 1.yield实现的功能 yield return: 先看下面的代码,通过yield return实现了类似用foreach遍历数组的功能,说明yield return也 ...

  4. C# 中yield关键字解析

    前言 前段时间了解到yield关键字,一直觉得还不错.今天给大家分享一下yield关键字的用法.yield return 返回集合不是一次性返回所有集合元素,而是一次调用返回一个元素.具体如何使用yi ...

  5. yield关键字用法与解析(C# 参考)

    yield 关键字向编译器指示它所在的方法是迭代器块. 编译器生成一个类来实现迭代器块中表示的行为. 在迭代器块中,yield 关键字与 return 关键字结合使用,向枚举器对象提供值. 这是一个返 ...

  6. yield关键字详解与三种用法

    本篇文章比较硬核, 适合有一定Python基础的读者阅读, 如果您对Python还不甚了解可以先关注我哦, 我会持续更新Python技术文章 yield详解 yield与return相同每次调用都会返 ...

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

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

  8. C#的yield关键字

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

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

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

随机推荐

  1. 使用list和tuple

    list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: >>> ...

  2. 转载 : Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结 投稿:jingxian 字体:[增加 减小] 类型:转载 时间:2013-11-14我要评论 本文是 ...

  3. charindex的用法

    declare @str nvarchar(50);set @str='462,464,2';select @str as '字符串'select len(@str) as '字符长度' select ...

  4. MapReduce的流程

    1. Inputformat会从job的INPUT_DIR目录下读入待处理的文件,检查输入的有效性并将文件切分成InputSplit列表.Job实例可以通过setInputFormatClass(Cl ...

  5. cocos2d-x与ios内存管理分析(在游戏中减少内存压力)

    转自:http://www.cocos2dev.com/?p=281 注:自己以前也写过cocos2d-x如何优化内存的使用,以及内存不足的情况下怎么处理游戏.今天在微博中看到有朋友介绍了下内存,挺详 ...

  6. SQL索引详解

    转自:http://www.cnblogs.com/AK2012/archive/2013/01/04/2844283.html SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可 ...

  7. Mysql 5.5 replication 多数据库主从备份Master-Slave配置总结

    配置Mysql server 5.5 的双机备份,也就是master-slave模式.本例子还是一个多database复制的情况. 现在有两个database在同一台mysql server,也就是m ...

  8. 【每日一摩斯】-【序列】-续-RAC and Sequences (853652.1)

    一个简单的sequence有什么可以说的呢?如果再这样认为就大错特错了... 也许以下几点高人们都很清楚,但至少对于我来说,之前是陌生的,或者说是忽略的. 1.CREATE SEQUENCE seq; ...

  9. QT: QByteArray储存二进制数据(包括结构体,自定义QT对象)

      因为利用QByteArray可以很方便的利用其API对内存数据进行访问和修改, 构建数据库blob字段时必不可少; 那如何向blob内写入自定义的结构体和类 1. 利用memcpy拷贝内存数据 / ...

  10. JavaScript网站设计实践(二)实现导航栏当前所选页面的菜单项高亮显示

    一.(一)中的代码还可以修改的地方. 在(一)中,如果是运行在服务器下,如apache等,可以把head和navigation的div抽取出来,放置在另一个html文件里,然后在页面中,include ...