c# 是如何对一个可遍历对象实现遍历的
2024-09-02 18:46:40
public class Persons:IEnumerable
{
public Persons(string[] people)
{
this.people = people;
} public string[] people { set; get; }
public IEnumerator GetEnumerator()
{
return new PersonEnumable(people);
}
}
public class PersonEnumable : IEnumerator
{
public PersonEnumable(string[] people)
{
this.people = people;
}
private string[] people { set; get; }
private int index { set; get; } = -;
/// <summary>
/// 当前对象
/// </summary>
public object Current {
get {
if (index < || index > people.Length-)
return null;
else
return people[index];
}
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public bool MoveNext()
{
if (index < people.Length-)
{
index++;
return true;
}
return false;
} /// <summary>
///
/// </summary>
public void Reset()
{
index = -;
}
}
var strArr = new string[] { "科比", "詹姆斯", "杜兰特", "诺维茨基", "东契奇", "卢比奥" };
var persons = new Persons(strArr);
foreach (var t in persons)
{
Console.WriteLine(t);
}
//foreachq其实大概就是执行了这段代码,只是不知道是什么时候执行的Reset()
PersonEnumable personEnumable = new PersonEnumable(strArr);
while (personEnumable.MoveNext())
{
Console.WriteLine(personEnumable.Current);
}
运行结果如下
可以看出两次输出结果是一样的。
最新文章
- cobbler 配置(转载)
- 微信小程序一步步搭建商城系列-01-开篇
- Jquery 中 ajaxSubmit使用讲解(转)
- 如何解决读取到文件末尾时碰到EOF导致的重复输出或者无用输出
- Nginx+Tomcat动静态资源分离
- [转] Python 模块学习:os模块
- Android大放送干:书籍、过程、工具等各种全
- 携程Java工程师——一道面向对象面试选择题(转)
- Oracle 数据库 有用的sql语句
- C++11改进我们的程序之简化我们的程序1
- unity下贴图混合(Texture Blending)
- Contest1874 - noip基础知识五:动态规划(背包、树dp、记忆化、递推、区间、序列dp、dp优化)
- bzoj 2669 题解(状压dp+搜索+容斥原理)
- scrapy爬虫框架处理流程简介
- Android学习之——自己搭建Http框架(1)
- Centos之链接命令
- GreenOpenPaint的实现(六)图片的保存和打开
- 第4天:function对象(案例:获取当前日期属于当年第几天、arguments对象、函数类型、参数、返回值、自身调用)
- tcpdump使用
- textview的阴影线
热门文章
- Eratos筛法(筛选素数)
- 【转载】Python tips: 什么是*args和**kwargs?
- Devops(一):CentOS7 安装Maven3.6.1详解
- 代理模式之Cglib代理
- Permission权限大全
- RedHat Enterprise7 搭建ISCSI
- Linux下通过crontab命令来实现定时任务
- Spring-Kafka —— KafkaListener定时启动和停止
- SpringBoot: 9.整合thymeleaf(转)
- 【Hadoop】MapReduce练习:多job关联实现倒排索引