在上一篇文章中,说了下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. A Tour of Go Map literals

    Map literals are like struct literals, but the keys are required. package main import "fmt" ...

  2. 在高版本SDK中打开现存低版本SDK工程

    直接打开低版本SDK工程会出现错误提示:“Unable to resolve target 'android-xx” 解决方法: 1.将project.properties文件中的“target=an ...

  3. 4G通信技术LTE介绍

    参考文档在这里 LTE技术 LTE是继GSM/EDGE和UMTS/HSxPA之后的由3GPP推出的移动网络技术最新标准,属于4G. 未来网络需要更高的数据速率,和包路由优化系统.更好的QoA和更廉价的 ...

  4. iOS 分类和继承

    iOS 中分类(Categories) 和 继承(Inherit)有相同的功能,但在一些细节上又有差异,简单介绍一下两者的异同. 分类可以在不知道系统类源代码的情况下,为这个类添加新的方法.分类只能用 ...

  5. win32进阶之路:给锁屏软件增加一个超链接按钮

    前言: windows下一切皆窗口,我们看到的超链接也是窗口,效果图如下: 鼠标放在赵大哥博客园主页和关于软件两个按钮上,按钮上的字体会从绿色变成红色,同时鼠标指针变为手型,点下鼠标左键就会调用默认浏 ...

  6. NSThead

    每个iOS应用程序都有个专门用来更新显示UI界面.处理用户的触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来极坏的用户体验.一般的解决方案就是将 ...

  7. view 与layer

      文章出处:http://blog.csdn.net/iukey 一.添加 Quartz Core 框架 要使用 Quartz Core 框架,你需要将其添加到你的工程中 . 然后  #import ...

  8. smarty3--registerPlugin()函数报错问题

    smarty版本:smarty3.1.30 registerPlugin错误信息: Notice: Trying to get property of non-object in E:\Joomla\ ...

  9. 中国大概能用的NTPserver地址

    133.100.11.8 prefer210.72.145.44203.117.180.36131.107.1.10time.asia.apple.com64.236.96.53130.149.17. ...

  10. 华为的JAVA面试题及答案(部分)

    华为的JAVA面试题 (后记:没有想到华为的面试题就是非同一般,非常多题不是一眼就行看得出来,至少对我这种鸟来说是这样.对我个人来说,看看这种题,可能比看<Think In Java>都还 ...