foreach是怎么实现遍历的
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq; using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2 {
class Program {
static void Main(string[] args)
{
Person per = new Person();
//如果直接遍历person,会提示person不包含getEnumrator的公共定义,所以foreach语句不能作用于person的变量
//foreach (string item in per)
//{
//}
//当person实心了iEnumreble接口时,其实目的只是为了实现接口中的IEnumerator的方法,此时foreach不在冒红了
foreach (string item in per)
{
Console.WriteLine(item);
}
Console.Read();
}
}
public class Person : IEnumerable
{
public string Name { get; set; }
public int Age { get; set; }
private string[] strArray = new string[] { "aaa", "bbb", "ccc", "ddd" };
/// <summary> /// 这就是枚举器 /// </summary>
/// <returns></returns>
public IEnumerator GetEnumerator()
{
//返回实现了IEnumerator接口的枚举器
return new PersonEnumrator(strArray);
}
}
/// <summary> /// 自己写一个枚举器,并且实现IEnumerator,然后需要重写IEnumerator中的方法 /// </summary>
public class PersonEnumrator : IEnumerator
{
//声明数组
string[] strArray;
/// <summary> /// 构造函数,初始化数组 /// </summary>
/// <param name="arr"></param>
public PersonEnumrator(string[] arr)
{
if (arr != null)
strArray = arr;
}
int index = -1;//下标
/// <summary> /// 返回数组中下标为index的值 /// </summary>
public object Current
{
get { return strArray[index]; }
}
/// <summary> /// index自增一,判断index是否在数组的范围之内 /// </summary>
/// <returns>在范围内,返回TRUE,否则返回FALSE</returns>
public bool MoveNext()
{
index++;
while (index < strArray.Length)
{
return true;
}
return false;
}
/// <summary> /// 将下标重置 /// </summary>
public void Reset()
{
index = -1;
} }
}
foreach是怎么实现遍历的的更多相关文章
- JAVA中ArrayList与LinkedList的区别以及对应List使用foreach与使用下标遍历的效率问题
近期在做一个对接京东的电商平台,所以对各个地方的效率考虑的比较多,今天深挖了一下ArrayList与LinkedList的区别以及对应List使用foreach与使用下标遍历的效率问题,首先说一下两种 ...
- Parallel.ForEach 使用多线遍历循环
Parallel.ForEach相对于foreach是多线程,并行操作;foreach是单线程品德操作. static void Main(string[] args) { Console.Write ...
- JSP中使用<c:forEach>标签循环遍历元素
1.forEach标签元素 <c:forEach items="接收集合对象" var="迭代参数名称" varStatus="迭代状态,可访问 ...
- php中的循环遍历 foreach list each
foreach语句遍历数组foreach语句用于循环遍历数组,每进行一次循环,当前数组元素的值就会被赋值给变量value(也可以是其它变量),数组指针会逐一的移动. 代码示例: foreach($ar ...
- PHP 数组的遍历的几种方式(以及foreach与for/while+each效率的比较)
* 使用foreach遍历数组时要注意的问题: * 1.foreach在遍历之前会自动重置指针使用其指向第一个元素,所以foreach可以多次遍历 * 2.foreach遍历完成之后,指针是没有指向数 ...
- PHP正则表达式;数组:for()遍历、 foreach ()遍历、each()list()组合遍历;指针遍历
正则表达式: 1.定界符号 任何字符,一般用 // 2. 模式修正符i 写在定界符外面后面,可不区分大小写 3.preg_replace($reg,&q ...
- ES5 forEach()用法和提前终止遍历
forEach()方法从头到尾的遍历数组,为每个元素调用指定的函数,第一个参数接收的是一个函数,第二个参数是可选的,如果有第二个参数,则调用的函数被看作是第二个参数的方法(第二个参数可以作为第一个调用 ...
- 二维数组遍历的方式(for普通循环遍历、foreach循环遍历、toString方式遍历)
package com.Summer_0421.cn; import java.lang.reflect.Array; import java.util.Arrays; /** * @author S ...
- PHP之旅3 php数组以及遍历数组 以及each() list() foreach()
php的数组的定义 <?php //php中定义数组时可以通过索引直接进行赋值: $mArr[0]="哈哈"; $mArr[1]=70; $mArr[2]='haha'; e ...
随机推荐
- JQuery与js具体使用的区别(不全,初学)
jQuery能大大简化Javascript程序的编写 要使用jQuery,首先要在HTML代码最前面加上对jQuery库的引用,比如: <script language="javasc ...
- 关于Python中yield的一些个人见解
# 样例代码def yield_test(n): for i in range(n): yield call(i) print("i=",i) #做一些其它的事情 print(&q ...
- Ext表格分页
pageSize:配置表格或者数据的数量, autoLoad: { start: 0, limit: 2 }:自动加载时候的参数, proxy中:params: {start: 0,limit: 2} ...
- 微信 python 接口 -- itchat 文档
itchat 一. 安装 $ pip install itchat 特殊的字典使用方式 通过打印 itchat 的用户以及注册消息的参数, 可以发现这些值都是字典. 但实际上 itchat 精心构造了 ...
- MySQL授权命令grant的使用方法
本文实例,运行于 MySQL 5.0 及以上版本. MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删 ...
- 详解 try-with-resource
[TOC] Oracle官方文档: http://docs.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources. ...
- 关于MATLAB处理大数据坐标文件201761
前几天备战考试,接下来的日子将会继续攻克大数据比赛 虽然停止了一段时间没有提交数据,但是这几天的收获还是有的,对Python 随机森林了解的更了解了 随机森林是由多课决策树组成(当然这个虽然我们初学者 ...
- MySQL,Oracle,PostgreSQL 数据库web维护客户端管理工具
TreeDMS数据库管理系统使用JAVA开发,采用稳定通用的springMVC +JDBC架构,实现基于WEB方式对 MySQL,Oracle,PostgreSQL 等数据库进行维护管理操作. 功能包 ...
- Windows 10环境安装VIM代码补全插件YouCompleteMe
Windows 10环境安装VIM代码补全插件YouCompleteMe 折腾一周也没搞定Windows下安装VIM代码补全插件YouCompleteMe,今天在家折腾一天总算搞定了.关键问题是在于P ...
- 10分钟就能学会的.NET Core配置
.NET Core为我们提供了一套用于配置的API,它为程序提供了运行时从文件.命令行参数.环境变量等读取配置的方法.配置都是键值对的形式,并且支持嵌套,.NET Core还内建了从配置反序列化为PO ...