枚举器和可枚举类型

枚举器和可枚举类型
前面我们已经知道了使用foreach语句可以遍历数组中的元素。但是为什么那么做呢?
原因是数组按需提供了一个叫做枚举器的对象。枚举器可以依次返回请求数组中的元素。
枚举器知道项的次序并且跟踪它所在序列中的位置,然后返回请求的当前项。
获取一个对象枚举器的方法是调用对象的GetEnumerator方法。实现GetEnumerator方法的类型叫做可枚举类型。
数组是可枚举类型。
IEnumerator接口
实现了IEnumerator接口的枚举器包含3个函数成员:Current,MoveNext,Reset.
Current是返回序列中当前位置项的属性。
 它是只读属性
 它返回object类型的引用,所以可以返回任何类型。
MoveNext是把枚举器位置前进到集合中下一项的方法。它返回布尔值,指示新的位置是有效地位置还是已经
超过了序列的尾部。如果新的位置有效返回true,新的位置无效返回false.
枚举器的原始位置在序列中的第一项之前,因此MoveNext必须在第一次使用Current之前调用。
Reset是把位置重置为原始状态的方法。
IEnumerable接口
可枚举类是指实现了IEnumerable接口的类,IEnumerable接口只有有一个成员---GetEnumerator方法,他返回对象的枚举器。
using System.Collections;
class Myclass:IEnumerable
{public IEnumerator GetEnumerator{.....}
 //返回IEnumerator类型的对象
}
using System.Collections;//要加入这行代码

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] Myarray = { 10, 11, 12, 13 };//创建数组
            //System.Collections.IEnumerator ie = Myarray.GetEnumerator();//或者使用这个不用上面那个命名空间;
            IEnumerator ie = Myarray.GetEnumerator();
            while (ie.MoveNext())
            {
                int i = (int)ie.Current;
                Console.WriteLine("{0}",i);
            }
            Console.Read();
        }
    }
}
static void Main(string[] args)
        {
            int[] Myarray = { 10, 11, 12, 13 };//创建数组
            foreach(int i in Myarray)
               Console.WriteLine("{0}",i);

            Console.Read();
        }
上面的代码和foreach产生的效果一样的;
时间: 2024-08-29 08:07:16

枚举器和可枚举类型的相关文章

C# 枚举器

1:枚举器和可枚举类型 我们知道使用foreach可以遍历数组中的元素.那么为什么数组可以被foreach语句处理呢,下面我们就进行讨论一下这个问题. 2:使用foreach语句 我们知道当我们使用foreach语句的时候,这个语句为我们依次取出了数组中的每一个元素. 例如下面的代码: 1 int[] arr = { 1, 2, 3, 4, 5, 6 }; 2 foreach( int arry in arr ) 3 { 4 Console.WriteLine("Array Value::{0}

IEnumerable公开枚举器

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

枚举器和迭代器

一.枚举器和可枚举类型 1.0   一个简单的例子 1 static void Main(string[] args) 2 { 3 int[] arr = { 2,3,5,8}; 4 foreach (int item in arr) 5 { 6 Console.WriteLine("item's Value is :{0}",item); 7 } 8 Console.ReadKey(); 9 } 上边例子通过foreach依次取出数组中的元素并打印,为什么数组能够实现这种操作呢?原因

C#枚举器和迭代器

Foreach能够获取数组中的每一个元素,原因数组能够提供一个枚举器的对象.对于枚举器类型而言,必须有一个方法来获取它.获取一个对象枚举器的方法是调用对象的GetEnumerator方法.数组是可枚举类型. IEnumerator接口: 实现了IEnumerator接口的枚举器包含了Current.MoveNext以及Reset函数成员. Current是返回序列中当前位置的属性: 它是只读属性. 它返回object类型的引用,所以可以返回任何类型 MoveNext是枚举器位置前进到下一项的方法

ruby迭代器枚举器

迭代器一个迭代器是一个方法,这个方法里面有yield语句,使用了yield的方法叫做迭代器,迭代器并非一定要迭代,与传递给这个方法的块进行数据传输 yield将数据传给代码快,代码块再把数据传输给yield each方法就是一个迭代器,里面有yield语句 枚举器1 一个枚举器是Enumerable::Enumerator的一个对象,Enumerable是一个模块2 使用枚举器 1.8的时候需要 require 'enumerator',在2.1就不用了3 可以通过new来实例化一个枚举器,但是

枚举器对象与可枚举类型

1.IEnumerator与IEnumerable接口 IEnumerator接口:实现此接口的为枚举器类型,此接口包含3个方法Current.MoveNext.Reset. IEnumerable接口:实现此接口只需实现一个方法GetEnumerator得到一个枚举器. class ColorEnumerator : IEnumerator //实现枚举器接口:Current,MoveNext,Reset共3种方法 { string[] _colors; int _position = -1;

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

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

for..in遍历,枚举器

#pragma mark ------------for循环遍历集合中的元素------ //创建一个数组,包含5个字符串对象,倒序取出数组中的所有元素,并存储到另一可变数组中 NSArray *array = @[@"1", @"2", @"3", @"4", @"5"]; NSMutableArray *marray = [NSMutableArray arrayWithCapacity:0]; for

oc语法-枚举器

2015-05-14 22:20:56 1:基于块的枚举 枚举器---循环 1 //使用枚举器进行循环操作 2 NSArray* array = @[@"aa",@"bb",@"cc",@"dd",@"ee",@"ff",@"gg"]; 3 [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL