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. 基于Dubbo框架构建分布式服务(二)

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> ...

  2. 【Phylab2.0】Beta版本发布说明

    新版本特性 1. 新的物理实验 1020314等 2. 讨论区与报告界面的整合 3. 在线脚本管理功能 4. 管理员功能 有在线脚本管理功能的支持后加入了管理员模式,可以向其他学校开放,招募管理员并添 ...

  3. 3 django系列之Form表单在前端web界面渲染与入库保存

    author: 温柔易淡(Leo),欢迎技术交流与拍砖 preface 我们在前端写表单的时候,其实可以使用django自带的forms功能来实现,特别是在处理 修改已经存在数据 的场景特别好用,下面 ...

  4. mybatis.net 多表联查

    mybatis.net针对多表联查,其实不用讲联查出的所有的列全部做一个新的resultMap,我们完全可以通过集成关系来实现,真是上一次说的懒加载,在一定程度上可以提高其性能,但这并不是说懒加载性能 ...

  5. 微软unity 注入mvc

    首先获取开源unity ,引用, 新建UnityDependencyResolver 继承IDependencyResolver,代码如下: public class UnityDependencyR ...

  6. 第八章 交互技术,8.1 VR电商购物(作者:宋五)

    8.1 VR电商购物 前言 GM LAB在2016年3月成立,是一个旨在探索最新电商购物体验的实验室.在探索VR购物的过程中,有两个需要核心解决的问题:一个是VR购物的产品形态是什么,另一个是VR环境 ...

  7. 关于LESS

    LESS 是动态的样式表语言,通过简洁明了的语法定义,使编写 CSS 的工作变得非常简单. 翻译成大白话:写CSS算是体力活,并没有编程的感觉,不给前端人员装逼的机会,于是就搞了这玩意,相当于编程写C ...

  8. [c#基础]关于try...catch最常见的笔试题

    引言 在翻看之前总结的常见面试题中,关于try...catch异常处理的还是蛮多了,今天看到这个面试题,也就重新学习一下. try..catch语法 try-catch语句由一个try块后跟一个或多个 ...

  9. runtime

    7.runtime实现的机制是什么,怎么用,一般用于干嘛. 你还能记得你所使用的相关的头文件或者某些方法的名称吗? 运行时机制,runtime库里面包含了跟类.成员变量.方法相关的API,比如获取类里 ...

  10. 利用beans.xml进行简单的Spring应用上下文创建与使用

    继上次配置Spring完成后,我们来创建一个简单的例程来理解Spring中利用beans.xml创建应用上下文的方法. 程序路径包为:com.spring.kinghts(kinght单词拼写错误,怕 ...