枚举器和迭代器(一)

 

C#中的枚举器(enumerator)通俗的讲是一个可以递进式的访问一个序列的指针(可能这并不恰当)foreach语句(迭代语句)是我们比较熟悉的,例如顺序输入一个字符串中的每个字符:

foreach (char c in "foreach")

            {

                Console.WriteLine(c);

            }

在这里foreach迭代的是一个字符串,这里的字符串便是一个可枚举的对象,那么什么又是可枚举对象呢?可枚举对象实际上是一个可以返回一个枚举器的对象。这里似乎有点绕,可能明确一下枚举器和可枚举对象的定义,会更容易理解。在C#中,一个对象只要实现IEnumeratorIEnumerator<T>接口,那么这个对象就是一个枚举器。IEnumerator的定义是:

public interface IEnumerator

    {

        bool MoveNext();//用于迭代的方法

        object Current { get; }//用于获取当前元素的属性

        void Reset();//重置

}

IEnumerator<T>的定义是:

public interface IEnumerator<T> : IDisposable, IEnumerator

    {

        T Current { get; }

}

IEnumerator接口中定义了一个用于迭代的方法,和一个用于获取当前元素的属性。

可枚举对象是一个实现了IEnumerableIEnumerable<T>的对象,他们的定义分别是:

public interface IEnumerable

    {

        IEnumerator GetEnumerator();

}

public interface IEnumerable<T> : IEnumerable

    {

        IEnumerator<T> GetEnumerator();

}

foreach为我们操作可枚举对象提供了方便如果没有foreach我们可能需要这样去迭代一个对象:

CharEnumerator charEnumeartor = "foreach".GetEnumerator();

    while (charEnumeartor.MoveNext())

    {

        char c = charEnumeartor.Current;

        Console.WriteLine(c);

}

看起来很麻烦,哈哈。

可枚举对象接口中的GetEnumerator方法是用于返回一个枚举器的,可能是出于解偶和灵活性的考虑,如果把IEnumeratorIEnumerable合并到一起,我们理解可枚举对象可能会更容易,即一个枚举器又是一个可枚举对象,其实迭代器就是用于生成一个即是枚举器又是可枚举对象的。 (待续……)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值