码迷,mamicode.com
首页 > 其他好文 > 详细

枚举器和可枚举类型

时间:2015-01-04 15:15:29      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

枚举器和可枚举类型
前面我们已经知道了使用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产生的效果一样的;

 

枚举器和可枚举类型

标签:

原文地址:http://www.cnblogs.com/leijiangtao/p/4201009.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!