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 关键字,则意味 ...
随机推荐
- DELPHI 数学函数+字符处理函数
System单元 Trunc(1234.5678);{1234} Trunc(-1234.5678);{-1234} Round(1234.5678);{1235} Round(-1234.5678) ...
- hdoj 1405 The Last Practice
The Last Practice Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- hdu 1597 find the nth digit
find the nth digit Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- nyoj 44 子串和
子串和 时间限制:5000 ms | 内存限制:65535 KB 难度:3 描述 给定一整型数列{a1,a2...,an},找出连续非空子串{ax,ax+1,...,ay},使得该子序列的和最 ...
- 转载 基于Selenium WebDriver的Web应用自动化测试
转载原地址: https://www.ibm.com/developerworks/cn/web/1306_chenlei_webdriver/ 对于 Web 应用,软件测试人员在日常的测试工作中, ...
- 简单dp-poj-2231-Moo Volume
题目链接: http://poj.org/problem?id=2231 题目大意: 给n个位置,求所有位置到其他n-1个位置的距离总和. 解题思路: 简单dp. o(n^2)的时间复杂度会超.先对这 ...
- SQL函数中的动态执行语句
一.为什么要使用动态执行语句? 由于在PL/SQL 块或者存储过程中只支持DML语句及控制流语句,并不支持DDL语句,所以Oracle动态执行语句便应允而生了.关于DDL与DML的区别,请参见:DDL ...
- 检查class排座位
在写这篇文章之前,xxx已经写过了几篇关于改检查class主题的文章,想要了解的朋友可以去翻一下之前的文章 每日一道理 灯,带有一种明亮的光,每当深夜来临,是它陪伴着你,如此默默无闻.它是平凡 ...
- ThinkPHP 获取配置文件中的值
C('SPECIAL_USER'):获取配置文件中的值 存入数组
- 7za 解压文件
7za.exe x -aoa 完美国际补丁.7z 7za.exe x -aoa 完美国际补丁.7z -o"C:\Users\Admin\AppData\Local\Temp\完美国际补丁&q ...