枚举器和可枚举类型

枚举器和可枚举类型

前面我们已经知道了使用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产生的效果一样的;

 

你可能感兴趣的:(枚举)