IEnumerable 接口 实现foreach 遍历 实例
额 为啥写着东西?
有次面试去,因为用到的时候特别少 所以没记住, 这个单词 怎么写!
经典的面试题:
能用foreach遍历访问的对象的要求?
答: 该类实现IEnumetable 接口 声明 GetEnumerator 方法。
这是统一的答案 非常正直 不是嘛?
但是 你真正的写过 这个功能吗?
今天看MSDN 关于 IEnumetable 第一次看这个接口 没看明白 ! 怎么办? 自己跟着写一次! 这个办法非常好,我特推荐!
命名规则就随便了, 别喷。
/// <summary>
/// 首先继承Ienumerable 接口
/// </summary>
public class Ns : IEnumerable
{ private List<object> list = new List<object>(); // 先定义委会的集合对象 private string name; private string age; private int id; public string Name
{
get
{
return this.name;
}
set
{
this.list.Add(value); // 特殊操作 赋值的时候将其先添加到维护的集合对象中
this.name = value;
}
} public string Age
{
get
{ return this.age;
}
set
{
this.list.Add(value); // 特殊操作 赋值的时候将其先添加到维护的集合对象中
this.age = value;
}
} public int Id
{
get
{ return this.id;
}
set
{
this.list.Add(value); // 特殊操作 赋值的时候将其先添加到维护的集合对象中
this.id = value;
}
} /// <summary>
/// 必须实现 GetEnumerator方法 更具返回类型 IEnumerator 来创建一个继承 IEnumerator接口的内部类
/// </summary>
/// <returns></returns>
public IEnumerator GetEnumerator()
{
return new NsIEnumerator(this);
} /// <summary>
/// IEnumerator接口的内部类 PS 该类其实就是对 维护着的集合对象做遍历操作的
/// </summary>
class NsIEnumerator : IEnumerator
{ private int ids = -; // 当前下标 private Ns n; // 传递过来的 需要遍历的类 public NsIEnumerator(Ns N)
{
this.n = N;
} public bool MoveNext() // 判断是否遍历完毕
{
this.ids++;
return (this.ids < this.n.list.Count);
} public void Reset() // 将下标重置
{
this.ids = -;
} public object Current // 这个就是通过变换的下标获取到的对应的 数据
{
get
{
return this.n.list[this.ids];
}
}
} static void Main(string[] args)
{ Ns n = new Ns(); n.Id = ;
n.Name = "liwen";
n.Age = ""; foreach (var n1 in n)
{
Console.WriteLine(n1);
} Console.ReadKey();
} }
没啥特别的 ,就是觉得可能很多人也和我一样知道这个功能 但是却自己没实现过。 贴上个来让那些人看一下。方便大家嘛
IEnumerable 接口 实现foreach 遍历 实例的更多相关文章
- Git使用总结 Asp.net生命周期与Http协议 托管代码与非托管代码的区别 通过IEnumerable接口遍历数据 依赖注入与控制反转 C#多线程——优先级 AutoFac容器初步 C#特性详解 C#特性详解 WPF 可触摸移动的ScrollViewer控件 .NET(C#)能开发出什么样的APP?盘点那些通过Smobiler开发的移动应用
一,原理 首先,我们要明白Git是什么,它是一个管理工具或软件,用来管理什么的呢?当然是在软件开发过程中管理软件或者文件的不同版本的工具,一些作家也可以用这个管理自己创作的文本文件,由Linus开发的 ...
- foreach为什么要实现IEnumerable接口而不是直接用IEnumerator接口
在.Net中,要想被foreach遍历,那么目标对象要实现IEnumerable或IEnumerable<T>接口,这个接口有一个方法,GetEnumerator(),返回一个IEnume ...
- 通过IEnumerable接口遍历数据
使用IEnumerable接口遍历数据,这在项目中会经常的用到,这个类型呢主要是一个枚举器. 1.首先需要让该类型实现一个名字叫IEnumerable的接口,实现该接口的主要目的是为了让当前类型中增加 ...
- C# 索引器,实现IEnumerable接口的GetEnumerator()方法
当自定义类需要实现索引时,可以在类中实现索引器. 用Table作为例子,Table由多个Row组成,Row由多个Cell组成, 我们需要实现自定义的table[0],row[0] 索引器定义格式为 [ ...
- Foreach遍历
前天在项目中遇到一个问题,foreach遍历过程中修改responses中的对象,其中responses的类型:IEnumerable<Order>,代码如下: foreach (Orde ...
- 使用yield关键字让自定义集合实现foreach遍历
一般来说当我们创建自定义集合的时候为了让其能支持foreach遍历,就只能让其实现IEnumerable接口(可能还要实现IEnumerator接口) 但是我们也可以通过使用yield关键字构建的迭代 ...
- c#--foreach遍历的用法与split的用法
一. foreach循环用于列举出集合中所有的元素,foreach语句中的表达式由关键字in隔开的两个项组成.in右边的项是集合名,in左边的项是变量名,用来存放该集合中的每个元素. 该循环 ...
- 你可能不知道的陷阱, IEnumerable接口
1. IEnumerable 与 IEnumerator IEnumerable枚举器接口的重要性,说一万句话都不过分.几乎所有集合都实现了这个接口,Linq的核心也依赖于这个万能的接口.C语言的 ...
- 实现Foreach遍历
实现Foreach遍历的集合类,需要实现IEnumerable接口,泛型集合则需要实现IEnumerable<T>接口 using System; using System.Collect ...
随机推荐
- 【caffe-windows】 caffe-master 之 cifar10 超详细
本教程尽量详细,大多步骤都有图,如果运行出错,请先对照自己的文件是否和图上的一样,包括标点啊,空格啊,斜杠,反斜杠啊之类的小细节. 本例程是在 win10 64位 caffe-master ...
- JavaScript事件小结
我们都晓得JavaScrip事件的重要性,所以下面小结一下以备后用! 序号 事件 描述 备注 onclick 鼠标点击某个对象时触发此事件 是最常用的事件之一 onchange 用户改变域的内容时 ...
- 洛谷P1211 [USACO1.3]牛式 Prime Cryptarithm
P1211 [USACO1.3]牛式 Prime Cryptarithm 187通过 234提交 题目提供者该用户不存在 标签USACO 难度普及- 提交 讨论 题解 最新讨论 题面错误 题目描述 ...
- ASPxGridView中批量提交及个别提交的写法
//获取chech box ID protected string GetProtoID() { string protoId = ""; //获取选中的记录Id List< ...
- [drp 2]String、StringBuffer和StringBuilder的区别
导读:在实际运用了,我们会频繁的用到string.stringBuffer和stringBuilder这三个东西,那么,他们之间的区别是什么呢.本文主要是从拼写SQL语句的角度,来阐释他们之间的区别! ...
- gitlb gerrit jenkins CI整合调试
- python 标准库获取网络信息
c语言ioctl定义的常量 /usr/include/x86_64-linux-gnu/bits/ioctls.h /* Copyright (C) 1996-2015 Free Software F ...
- leetcode 27
27. Remove Element Given an array and a value, remove all instances of that value in place and retur ...
- poj2017
一天两个题,凑数用的大水题啊...不解释了..羞愧ing #include <stdio.h> int main(){ int t; int i; ],b[],tot; ){ tot=; ...
- Openvz特点和分析
OpenVZ是开源软件,是基于Linux平台的操作系统级服务器虚拟化解决方案.OpenVZ采用SWsoft的Virutozzo虚拟化服务器软件产品的内核,Virutozzo是SWsoft公司提供的商业 ...