public class Person
{
private string[] friends = { "asf", "ewrqwe", "ddd", "eeee" };
public string name { get; set; } public int age { get; set; }
//这是第一种方法
public IEnumerable ForEach()
{
for (int i = ; i < friends.Length; i++)
{
yield return friends[i];
}
}
}

调用

  class Program
{
static void Main(string[] args)
{
Person p = new Person(); foreach (var item in p.ForEach())
{
Console.WriteLine(item);
} Console.Read();
}
}

第二种 方法

  class Program
{
static void Main(string[] args)
{
Person p = new Person(); foreach (var item in p)
{
Console.WriteLine(item);
} Console.Read();
}
} public class Person
{
private string[] friends = { "asf", "ewrqwe", "ddd", "eeee" };
public string name { get; set; } public int age { get; set; } //这是第二种
////当返回值类型是IEnumerator时,
//编译器帮我们生成了一个“枚举器”类,
//即:一个实现了IEnumerator接口的类型。
public IEnumerator GetEnumerator()
{
for (int i = ; i < friends.Length; i++)
{
yield return friends[i];
}
}
}
 
第三种 方法  自己生产枚举器
  class Program
{
static void Main(string[] args)
{
Person p = new Person(); foreach (var item in p)
{
Console.WriteLine(item);
} Console.Read();
}
} public class Person
{
private string[] friends = { "asf", "ewrqwe", "ddd", "eeee" };
public string name { get; set; } public int age { get; set; } //这是第二种
////当返回值类型是IEnumerator时,
//编译器帮我们生成了一个“枚举器”类,
//即:一个实现了IEnumerator接口的类型。
public IEnumerator GetEnumerator()
{
return new PersonEnumerator(friends);
}
} //枚举器
public class PersonEnumerator : IEnumerator
{
private string[] frends;
//使用构造函数 传值
public PersonEnumerator(string[] fs)
{
frends = fs;
}
private int index = -; public object Current
{
get
{
if (index >= && index < frends.Length)
{
return frends[index];
}
else
{
throw new NotImplementedException();
}
}
} public bool MoveNext()
{
if (index + < frends.Length)
{
index++;
return true;
}
return false;
} public void Reset()
{
index = -; } }
 

Foreach 原理的更多相关文章

  1. Foreach原理

    本质:实现了一个IEnumerable接口, 01.为什么数组和集合可以使用foreach遍历? 解析:因为数组和集合都实现了IEnumerable接口,该接口中只有一个方法,GetEnumerato ...

  2. .net学习之集合、foreach原理、Hashtable、Path类、File类、Directory类、文件流FileStream类、压缩流GZipStream、拷贝大文件、序列化和反序列化

    1.集合(1)ArrayList内部存储数据的是一个object数组,创建这个类的对象的时候,这个对象里的数组的长度为0(2)调用Add方法加元素的时候,如果第一次增加元神,就会将数组的长度变为4往里 ...

  3. Array.forEach原理,仿造一个类似功能

    Array.forEach原理,仿造一个类似功能 array.forEach // 设一个arr数组 let arr = [12,45,78,165,68,124]; let sum = 0; // ...

  4. 浅析foreach原理

    在日常开发工作中,我们发现很多对象都能通过foreach来遍历,比如HashTable.Dictionary.数组等数据类型.那为何这些对象能通过foreach来遍历呢?如果写一个普通的Person类 ...

  5. C#学习笔记:foreach原理

    这篇随笔是对上一篇随笔C#关键字:yield的扩展. 关于foreach 首先,对于 foreach ,大家应该都非常熟悉,这里就简单的描述下. foreach 语句用于对实现  System.Col ...

  6. C#foreach原理

    本文主要记录我在学习C#中foreach遍历原理的心得体会. 对集合中的要素进行遍历是所有编码中经常涉及到的操作,因此大部分编程语言都把此过程写进了语法中,比如C#中的foreach.经常会看到下面的 ...

  7. C# foreach 原理以及模拟的实现

    public class Person:IEnumerable     //定义一个person类  并且 实现IEnumerable 接口  (或者不用实现此接口 直接在类 //里面写个GetEnu ...

  8. 涉及 C#的 foreach问题

    当时是用foreach实现遍历,但是函数传入参数是Object类型的,由于Objectl类型没有实现相关接口,所以foreach并不能执行. 那么下面我们来看看,想要使用foreach需要具备什么条件 ...

  9. mybatis foreach 循环 list(map)

    直接上代码: 整体需求就是: 1.分页对象里面有map map里面又有数组对象 2.分页对象里面有list list里面有map map里面有数组对象. public class Page { pri ...

随机推荐

  1. mysql 远程连接数据库的二种方法

    http://blog.csdn.net/freecodetor/article/details/5799550 一.连接远程数据库: 1.显示密码 如:MySQL 连接远程数据库(192.168.5 ...

  2. STL的使用

    Vector:不定长数组 Vector是C++里的不定长数组,相比传统数组vector主要更灵活,便于节省空间,邻接表的实现等.而且它在STL中时间效率也很高效:几乎与数组不相上下. #include ...

  3. MSSQLServer中组织或分类表的设计及其递归查询

    开篇:项目中用到上下级从属关系的太多太多了,如:组织.分类.行政区域,这里不再一一介绍,遇到这种的如何去进行数据库表的设计及其应用的,个人对往期项目中所涉及到的进行了一些总结. 数据库表设计:表字段一 ...

  4. Redis Cluster

    使用 Redis Cluster Redis 3.0 在2015年出了Stable版本,3.0版本相对于2.8版本带来的主要新特性包括: 实现了Redis Cluster,从而做到了对集群的支持: 引 ...

  5. R语言——绘制半圆形图

    好久没发点新的作品了.......也许...... Que sera, seraWhatever will be, will be

  6. Eclipse MySQL Hibernate 中文乱码问题

    如果是Eclipse的问题,那就对以下各项进行设置,即可排除问题. 设置eclipse相关编码为UTF-8: 修改工作区默认编码,位置:windows--perferences--general--w ...

  7. 浏览器内部工作原理--作者:Tali Garsiel

    本篇内容为转载,主要用于个人学习使用,作者:Tali Garsiel 一.介绍 浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工作原理,我们将看到,从你在地址栏输入google.com到你看到 ...

  8. python标准模块(os及sys模块)

    一.os模块 用于提供系统级别的操作 os.getcwd() 获取当前工作目录 os.stat('path/filename') 获取文件/目录信息,其中包括文件大小等 os.sep 获得操作系统特定 ...

  9. 【Make a H5 game】JS for beginner——FROM U2B

    https://www.youtube.com/watch?v=F2Dc-JlwgN4&feature=iv&src_vid=WfL4LNUL3R0&annotation_id ...

  10. 成功开发iPhone软件的10个步骤

    总结 几条要注意的原则: 1.了解你的用户,并与他们接触.交谈. 2.不要做虚幻的想象的设计,多从成功软件中汲取经验. 3.软件要设计得“小”. 4.找到足够多的设计方案,通过数量的累计来得到好的质量 ...