额 为啥写着东西?

有次面试去,因为用到的时候特别少 所以没记住, 这个单词 怎么写!

经典的面试题:

能用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 遍历 实例的更多相关文章

  1. Git使用总结 Asp.net生命周期与Http协议 托管代码与非托管代码的区别 通过IEnumerable接口遍历数据 依赖注入与控制反转 C#多线程——优先级 AutoFac容器初步 C#特性详解 C#特性详解 WPF 可触摸移动的ScrollViewer控件 .NET(C#)能开发出什么样的APP?盘点那些通过Smobiler开发的移动应用

    一,原理 首先,我们要明白Git是什么,它是一个管理工具或软件,用来管理什么的呢?当然是在软件开发过程中管理软件或者文件的不同版本的工具,一些作家也可以用这个管理自己创作的文本文件,由Linus开发的 ...

  2. foreach为什么要实现IEnumerable接口而不是直接用IEnumerator接口

    在.Net中,要想被foreach遍历,那么目标对象要实现IEnumerable或IEnumerable<T>接口,这个接口有一个方法,GetEnumerator(),返回一个IEnume ...

  3. 通过IEnumerable接口遍历数据

    使用IEnumerable接口遍历数据,这在项目中会经常的用到,这个类型呢主要是一个枚举器. 1.首先需要让该类型实现一个名字叫IEnumerable的接口,实现该接口的主要目的是为了让当前类型中增加 ...

  4. C# 索引器,实现IEnumerable接口的GetEnumerator()方法

    当自定义类需要实现索引时,可以在类中实现索引器. 用Table作为例子,Table由多个Row组成,Row由多个Cell组成, 我们需要实现自定义的table[0],row[0] 索引器定义格式为 [ ...

  5. Foreach遍历

    前天在项目中遇到一个问题,foreach遍历过程中修改responses中的对象,其中responses的类型:IEnumerable<Order>,代码如下: foreach (Orde ...

  6. 使用yield关键字让自定义集合实现foreach遍历

    一般来说当我们创建自定义集合的时候为了让其能支持foreach遍历,就只能让其实现IEnumerable接口(可能还要实现IEnumerator接口) 但是我们也可以通过使用yield关键字构建的迭代 ...

  7. c#--foreach遍历的用法与split的用法

    一. foreach循环用于列举出集合中所有的元素,foreach语句中的表达式由关键字in隔开的两个项组成.in右边的项是集合名,in左边的项是变量名,用来存放该集合中的每个元素.      该循环 ...

  8. 你可能不知道的陷阱, IEnumerable接口

    1.  IEnumerable 与  IEnumerator IEnumerable枚举器接口的重要性,说一万句话都不过分.几乎所有集合都实现了这个接口,Linq的核心也依赖于这个万能的接口.C语言的 ...

  9. 实现Foreach遍历

    实现Foreach遍历的集合类,需要实现IEnumerable接口,泛型集合则需要实现IEnumerable<T>接口 using System; using System.Collect ...

随机推荐

  1. JAVA设计模式之单一职责原则

    概念: 就一个类而言应该只有一个因其他变化的原因. 流程: 问题由来:设类或接口类C负责两个不同不同的职责:职责T1,职责T2.当由于职责T1需求改变进而需要修改类C时,可能导致职责T2收到不可预知的 ...

  2. 迁移到 Express 4.x

    原文地址: http://expressjs.com/migrating-4.html 概览 从 Express 3 到Express 4 是一个巨大的变化,这意味着现存的 Express 3 应用在 ...

  3. MFC学习 文件操作注册表操作

    c读写文件 void CFileView::OnRead() { FILE *pFile = fopen("1.txt", "r"); /*char ch[10 ...

  4. DP小乐乐化妆品

    Hrbust1814 http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1814 #in ...

  5. Ant 脚本打印系统属性变量、ant内置属性

    Ant 脚本打印系统属性变量.ant内置属性 作用 编写ant脚本的时候,经常会引用到系统属性,本脚本用于打印系统常用属性(System.getProperties)与环境变量(Environment ...

  6. 读取计算机的OEM信息

    只需要读取注册表里面的值即可 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation\Logo 下面有制 ...

  7. android手机自带浏览器无法识别apk文件

    在项目中遇到安卓自带浏览器下载成功 , 但无法打开已下载的APK文件自动安装的问题,特别是三星系列的手机普遍存在这种问题,google后发现也有朋友遇到类似的问题: http://bbs.csdn.n ...

  8. JavaScript常用代码段

    总结一下在各种地方看到的还有自己使用的一些实用代码 1)区分IE和非IE浏览器 if(!+[1,]){ alert("这是IE浏览器"); } else{ alert(" ...

  9. Freebsd下压缩解压文件详解

    压缩篇: 把/usr/webgames目录下的文件打包.命名为bak.tar.gz 放到/usr/db-bak目录里 下面命令可以在任意目录执行.无视当前目录和将要存放文件的目录.tar -zcvf ...

  10. 用代码给TABLE 添加字段,设置属性并编译

    AOTTableFieldList AOTTableFieldList ,TableFieldNode; TableName tableName = "SML_InventTableExt& ...