Foreach 原理
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 原理的更多相关文章
- Foreach原理
本质:实现了一个IEnumerable接口, 01.为什么数组和集合可以使用foreach遍历? 解析:因为数组和集合都实现了IEnumerable接口,该接口中只有一个方法,GetEnumerato ...
- .net学习之集合、foreach原理、Hashtable、Path类、File类、Directory类、文件流FileStream类、压缩流GZipStream、拷贝大文件、序列化和反序列化
1.集合(1)ArrayList内部存储数据的是一个object数组,创建这个类的对象的时候,这个对象里的数组的长度为0(2)调用Add方法加元素的时候,如果第一次增加元神,就会将数组的长度变为4往里 ...
- Array.forEach原理,仿造一个类似功能
Array.forEach原理,仿造一个类似功能 array.forEach // 设一个arr数组 let arr = [12,45,78,165,68,124]; let sum = 0; // ...
- 浅析foreach原理
在日常开发工作中,我们发现很多对象都能通过foreach来遍历,比如HashTable.Dictionary.数组等数据类型.那为何这些对象能通过foreach来遍历呢?如果写一个普通的Person类 ...
- C#学习笔记:foreach原理
这篇随笔是对上一篇随笔C#关键字:yield的扩展. 关于foreach 首先,对于 foreach ,大家应该都非常熟悉,这里就简单的描述下. foreach 语句用于对实现 System.Col ...
- C#foreach原理
本文主要记录我在学习C#中foreach遍历原理的心得体会. 对集合中的要素进行遍历是所有编码中经常涉及到的操作,因此大部分编程语言都把此过程写进了语法中,比如C#中的foreach.经常会看到下面的 ...
- C# foreach 原理以及模拟的实现
public class Person:IEnumerable //定义一个person类 并且 实现IEnumerable 接口 (或者不用实现此接口 直接在类 //里面写个GetEnu ...
- 涉及 C#的 foreach问题
当时是用foreach实现遍历,但是函数传入参数是Object类型的,由于Objectl类型没有实现相关接口,所以foreach并不能执行. 那么下面我们来看看,想要使用foreach需要具备什么条件 ...
- mybatis foreach 循环 list(map)
直接上代码: 整体需求就是: 1.分页对象里面有map map里面又有数组对象 2.分页对象里面有list list里面有map map里面有数组对象. public class Page { pri ...
随机推荐
- vue2.0---模板语法
***插值 #文本 数据绑定最常见的形式就是双大括号的形式: <div id="app">{{message}}</div> 只要绑定的属性message上 ...
- 【转载】如何用IntelliJ IDEA 14 创建Web项目
首先要理解一个概念:在IntelliJ IDEA中"new Project"相当于eclipse中的工作空间(Workspace),而"new Module"相 ...
- EFCore教程
https://docs.microsoft.com/en-us/ef/core/modeling/alternate-keys aspnet core 教程 https://docs.microso ...
- Thread 学习记录 <1> -- volatile和synchronized
恐怕比较一下volatile和synchronized的不同是最容易解释清楚的.volatile是变量修饰符,而synchronized则作用于一段代码或方法:看如下三句get代码: int i1; ...
- Android之仿微信图片选择器
先上效果图.第一张图显示的是“相机”文件夹中的所有图片:通过点击多张图片可以到第二张图所示的效果(被选择的图片会变暗,同时选择按钮变亮):点击最下面的那一栏可以到第三张图所示的效果(显示手机中所有包含 ...
- Redis实战阅读笔记——第一章
Redis 实战 中文版 的20-21页看的人郁闷死了,最后看英文版才明白意思,哎,我理解能力差成这样了 其中,图 1-12 有错误,草,这个是英文版的错--应该是group:programming
- easyui datagrid中 多表头方法总结
easyui datagrid中怎么设置表头成多行显示呢?其实很简单,就是给datagrid的columns属性设置成多个数组就行了.下面直接看例子吧,这是一个两行表头的,按照此方法,还可以设置三行表 ...
- 使用Impersonation仿冒用户运行WCF 服务方法
默认情况下,当我们把wcf服务器部署在IIS上时, 我们访问wcf时使用的是IIS内建的内建角色,对于IIS8.0,它被命名为ApplicationPoolIdentity, 一般来说,系统为每个应用 ...
- Mongodb系统管理员权限设置
管理员账号无法执行show dbs .show collections Js代码 { "_id" : ObjectId("52a82bb26cea234c4deb06 ...
- Eclipse最常用快捷键
常用快捷键: Ctrl + 1 :快速修复(当编辑器出现红色波浪线时使用此快捷键能快速弹出提示) Ctrl + d :删除当前光标所在的行 Ctrl + z :撤销上一步的操作 Ctrl + y :重 ...