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 ...
随机推荐
- Webpack 代码分离
Webpack 代码分离 代码分离是 webpack 中最引人注目的特性之一. 你可以把你的代码分离到不同的 bundle 中,然后你就可以去按需加载这些文件. 总的来说, webpack 分离可以分 ...
- 常用SHELL命令
1.查看版本号cat /proc/version; uname -a; uname -r 2.查看用户组cat /etc/group 3.查看当前用户组 groups 4.查看当前用户 whoami ...
- Windows下安装Python扩展模块提示Unable to find vcvarsall.bat的问题
本文内容 Unable to find vcvarsall.bat的问题描述 问题分析 总结 提示: 如果你只是想知道自己需要安装哪个版本的Visual Studio请直接查看本文最后一个小节的内容. ...
- 【CC2530入门教程-03】CC2530的中断系统及外部中断应用
第3课 CC2530的中断系统及外部中断应用 广东职业技术学院 欧浩源 一.中断相关的基础概念 内核与外设之间的主要交互方式有两种:轮询和中断. 轮询的方式貌似公平,但实际工作效率很低,且不能及 ...
- MySQL,Oracle,PostgreSQL通过web方式管理维护, 提高开发及运维效率
在开发及项目运维中,对数据库的操作大家目前都是使用客户端工具进行操作,例如MySQL的客户端工具navicat,Oracle的客户端工具 PL/SQL Developer, MSSQL的客户端工具查询 ...
- [Leetcode] DP -- Target Sum
You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have 2 symb ...
- 枚举:enum——初写
入门的时候,针对某一字段状态的判断,一开始是在前端用if else 判断,有一些弊端:①把内置的code暴露给用户②if else最好不要超过3层③前端很长一段冗余判断不规范后改进使用枚举,在后台进行 ...
- php防止浏览器点击返回按钮重复提交数据
<!--html中存放隐藏域数据--> <input type="hidden" value='{$sun_nums}' name='sub_nums' /> ...
- smarty模板基础知识
1.定义 Smarty是一个使用php写出来的模板引擎,它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与html代码混杂在一起PHP代码逻辑分离. 简单的讲,目的就是要使PH ...
- mysql查看数据表索引信息
查看索引 mysql> show index from tblname; mysql> show keys from tblname; · Table 表的名称. · Non_unique ...