枚举 IEnumerable

namespace _03
{
class Program
{

public static void Main()
{
Person person = new Person();
IEnumerator ienu= person.GetEnumerator();
while (ienu.MoveNext())
{
Console.WriteLine(ienu.Current);
}
}
}

class Person :IEnumerable // 返回一个循环访问集合的枚举数
{
private string[] _names = { "夹心饼干","大师","香肠"};
private string _email;

private int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}
public string Email
{
get
{ return _email; }
set
{ _email = value; }
}
public string[] Names
{
get { return _names; }
set { _names = value; }
}
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
// 一个可用于循环访问集合的 System.Collections.IEnumerator 对象。

public IEnumerator GetEnumerator()
{
return new Person1(Names);
}
}
class Person1:IEnumerator
{
public Person1(string[] names)
{
_names = names;
}
public Person1() { }
private string[] _names;
public string[] Names
{
get { return _names; }
set { _names = value; }
}
private int index = -1;
public int Index
{
get { return index; }
set { index = value; }
}
public string this[int index]
{
get { return this[index]; }
}
public object Current
{
get
{
if(Index<Names.Length&&Index>=0)
{
return Names[Index];
}
else
{
throw new IndexOutOfRangeException();
}
}

}

public bool MoveNext()
{
if (index+1<Names.Length)
{
index++;
return true;

}
return false;
}
public void Reset()
{
index = -1;
}
}

}

时间: 2024-12-19 22:15:57

枚举 IEnumerable的相关文章

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

IEnumerable枚举器接口的重要性,说一万句话都不过分.几乎所有集合都实现了这个接口,Linq的核心也依赖于这个万能的接口.C语言的for循环写得心烦,foreach就顺畅了很多. 我很喜欢这个接口,但在使用中也遇到不少的疑问,你是不是也有与我一样的困惑: (1) IEnumerable 与  IEnumerator到底有什么区别 (2) 枚举能否越界访问,越界访问是什么后果?为什么在枚举中不能改变集合的值? (3) Linq的具体实现到底是怎样的,比如Skip,它跳过了一些元素,那么这些

IEnumerable公开枚举器

// 摘要: //     公开枚举器,该枚举器支持在非泛型集合上进行简单迭代. [ComVisible(true)] [Guid("496B0ABE-CDEE-11d3-88E8-00902754C43A")] public interface IEnumerable { // 摘要: //     返回一个循环访问集合的枚举器. // // 返回结果: //     可用于循环访问集合的 System.Collections.IEnumerator 对象. [DispId(-4)]

实现自定义集合的可枚举类型(IEnumerable)和枚举数(IEnumerator )

下面的代码示例演示如何实现自定义集合的 IEnumerable 和 IEnumerator 接口: 1 using System; 2 using System.Collections; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 8 namespace ConsoleApplication1 9 { 10 publi

.NET教程:.NET 面试题之IEnumerable

.NET教程,今天给大家介绍的是:.NET 面试题之IEnumerable ,这是在面试的时候可能会碰到的一道题目,这道题的注解分为了两个部分,这一篇是第一部分! 什么是IEnumerable? IEnumerable及IEnumerable的泛型版本IEnumerable是一个接口,它只含有一个方法GetEnumerator.Enumerable这个静态类型含有很多扩展方法,其扩展的目标是IEnumerable. 实现了这个接口的类可以使用Foreach关键字进行迭代(迭代的意思是对于一个集合

C#知识点-枚举器和迭代器

一.几个基本概念的理解 问题一:为什么数组可以使用foreach输出各元素 答:数组是可枚举类型,它实现了一个枚举器(enumerator)对象:枚举器知道各元素的次序并跟踪它们的位置,然后返回请求的当前项 问题二:不用foreach能不能遍历各元素 问题三:什么是可枚举类 答:可枚举类是指实现了IEnumerable接口的类:IEnumerable接口只有一个成员GetEnumerator方法,它返回对象的枚举器 问题四:什么是枚举器 答:实现了IEnumerator接口的枚举器包含三个函数成

多线程枚举安全的List

最近在做windows runtime下APP开发的工作.在Service层请求返回后,往往会通过回调的形式来通知UI更新数据.多个线程操作经常出现foreach抛出异常:System.InvalidOperationException: 集合已修改:可能无法执行枚举操作,导致APP crash. 在网上搜索了一下,得出以下结论: 实现一个真正线程安全的List是很困难的,具体可以参考这篇Why are thread safe collections so hard?. 使用Concurrent

IEnumerable和IEnumerator 详解

http://blog.csdn.net/byondocean/article/details/6871881 初学C#的时候,老是被IEnumerable.IEnumerator.ICollection等这样的接口弄的糊里糊涂,我觉得有必要切底的弄清楚IEnumerable和IEnumerator的本质. 下面我们先看IEnumerable和IEnumerator两个接口的语法定义.其实IEnumerable接口是非常的简单,只包含一个抽象的方法GetEnumerator(),它返回一个可用于

C#基础复习IEnumerable(和 yield return的使用滴呀 )

IEnumerable 真是基础中的基础,然而..... 我们直接来看看这个接口的实现吧: 它是一个公开枚举数,该枚举数支持在非泛型集合上进行简单的迭代.换句话说,对于所有数组的遍历,都来自IEnumerable,那么我们就可以利用这个特性,来定义一个能够遍历xxxxxx的通用方法 先看我们的经典实例1: using System; using System.Collections; using System.Collections.Generic; using System.Linq; usi

第十九章、枚举集合

foreach极大地简化了需要编写的代码,但它只能在特定情况下使用——只能使用foreach遍历可枚举集合. 什么是可枚举集合?简单地说就是实现了System.Collections.IEnumerable接口的集合. IEnumerable接口包含一个名为GetEnumerator的方法: IEnumerator GetEnumerator(); GetEnumerator方法应该返回实现了System.Collections.IEnumerable接口的枚举器对象,枚举器对象用于遍历(枚举)