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;

}     }

}

时间: 2024-10-13 20:57:25

foreach是怎么实现遍历的的相关文章

Parallel.ForEach 使用多线遍历循环

Parallel.ForEach相对于foreach是多线程,并行操作;foreach是单线程品德操作. static void Main(string[] args) { Console.WriteLine("Hello World!"); List<UserInfo> lst = new List<UserInfo> { }; UserInfo[] array = new UserInfo[] {}; for (int i = 1; i <= 10;

夺命雷公狗---Smarty NO:10 foreach数组的遍历

功能:主要实现对数组的遍历输出 基本语法: foreach,foreachelse {foreach from=数组 key=键 name=名称 item=内容 } {foreachelse} {/foreach} from:要遍历输出的数组 item:每次遍历时,系统会自动将遍历的结果放入item内容中 key:键值,每次遍历时,系统会将遍历的键值放入key中 name:foreach名称,为foreach起名 foreachelse:当数组为空时,执行此句 demo4.html示例代码 <!

Array.prototype.forEach数组遍历

forEach是Array新方法中最基本的一个,就是遍历,循环.先看以前是怎么遍历数组的 常用遍历 var arr = [1,2,3,4,5]; for(var i = 0; i < arr.length; i++){ console.log(arr[i]); // 1,2,3,4,5 } 排除null与undefined和不存在元素的遍历 var arr = [1,undefined,null,,5]; for(var i = 0; i < arr.length; i++){ if(!arr

PHP 数组遍历 foreach 语法结构

foreach 语法结构用于遍历数组. foreach() PHP foreach() 语法结构用于遍历操作或输出数组,foreach() 仅能用于遍历数组或对象,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误. 语法: foreach (array as $value) statement // 或者: foreach (array as $key => $value) statement 上述语法中,每次循环将当前单元的值赋给 $value 并且数组内部的指针向前移一步.在第二

PHP正则表达式;数组:for()遍历、 foreach ()遍历、each()list()组合遍历;指针遍历

正则表达式:$s = "he8llo5wor6ld";$s = preg_replace("/\d/","#",$s);   //按照正则表达式替换$attr = preg_split("/\d/",$s);   //按照正则表达式拆分$arr = array();preg_match("/\d/",$s,$arr);   //匹配满足正则的第一个字符串preg_match_all("/\d/&q

php中的循环遍历 foreach list each

foreach语句遍历数组foreach语句用于循环遍历数组,每进行一次循环,当前数组元素的值就会被赋值给变量value(也可以是其它变量),数组指针会逐一的移动. 代码示例: foreach($array as $value){  //$array要遍历的数组,$value为指针指向数组当前的值,as起到赋值的作用 code to executed;} foreach语句也可以获得数组的键名,如下:  代码示例: foreach($array as $key => $value){ echo

jstl foreach标签

forEach标签 forEach标签用来循环. 属性: * var :定义循环变量 * begin :从哪开始 * end :到哪结束 * step :递增 * items :遍历的内容 * varStatus :记录循环变量 代码: <h1>JSTL的forEach标签</h1> <h3>遍历数组</h3> <% String[] arrs = { "小默", "小房", "美美" };

.net 接口与 foreach必要条件

引用自http://blog.csdn.net/byondocean/article/details/6871881 初学C#的时候,老是被IEnumerable.IEnumerator.ICollection等这样的接口弄的糊里糊涂,我觉得有必要切底的弄清楚IEnumerable和IEnumerator的本质. 下面我们先看IEnumerable和IEnumerator两个接口的语法定义.其实IEnumerable接口是非常的简单,只包含一个抽象的 方法GetEnumerator(),它返回一

foreach的用法(转)

JDK1.5加入的增强for和循环. foreach语句使用总结 增强for(part1:part2){part3}; part2中是一个数组对象,或者是带有泛性的集合. part1定义了一个局部变量,这个局部变量的类型与part2中的对象元素的类型是一致的. part3当然还是循环体. foreach语句是java5的新特征之一,在遍历数组.集合方面,foreach为开发人员提供了极大的方便. foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而,