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

迭代器

时间:2014-12-23 17:07:32      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

常见的迭代器模式有以下两种,我们可以创建迭代器来返回可枚举类型或枚举器。
下面演示如何使用迭代器创建可枚举类。
print方法是一个迭代器块,可以为A类产生并返回枚举器的方法。
A类还实现了getenumrator方法,他调用print并且返回print返回的枚举器。
注意main方法,由于A类实现了getenumrator方法方法,是可枚举类型,我们在foreach语句中直接使用类的实例。
namespace ConsoleApplication1
{
    class A
    {
        
        string str_1="111";
        string str_2 = "222";
        string str_3 = "333";
        public IEnumerator<string> GetEnumerator()
        {return print();           //返回枚举器
        }
        public IEnumerator<string>print()//IEnumrator<string>的意思为--->返回枚举器                                   
        {
            yield return str_1;
            yield return str_2;
            yield return str_3;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            A obj = new A();
            foreach (string str in obj)
                Console.WriteLine(str);
            Console.Read();
            
        }
    }
}
技术分享
解析:print迭代器方法返回IEnumrator<string>,A类通过返回的由print返回的对象来实现GetEnumerator方法----->这句话很重要,上面代码的说明
当我们实现了返回枚举器的迭代器时,必须通过实现GetEnumerator来让类可枚举,他返回由迭代器返回的枚举器。
把类A改为如下,输出和上面同样的结果
class
A { string str_1 = "111"; string str_2 = "222"; string str_3 = "333"; public IEnumerator<string> GetEnumerator() { yield return str_1; yield return str_2; yield return str_3; } }
使用迭代器来创建可枚举类型
namespace
ConsoleApplication1 { class A { string str_1 = "111"; string str_2 = "222"; string str_3 = "333"; public IEnumerable<string> print()//IEnumerable<string>的意思为返回可枚举类型 { yield return str_1; yield return str_2; yield return str_3; } } class Program { static void Main(string[] args) { A obj = new A(); foreach (string str in obj.print())//注意这儿和上面不一样的,调用的是obj.print()而不是obj Console.WriteLine(str); Console.Read(); } } }
//输出结果和上面的一样。如果不实现GetEnumerator使类本身不可枚举,仍然可以使用由迭代器返回的可枚举器类,只需要直接调用迭代器方法。

 


namespace
ConsoleApplication1 { class A { string str_1 = "111"; string str_2 = "222"; string str_3 = "333"; public IEnumerator<string> GetEnumerator() { IEnumerable<string> myIEnumerable = print();//获取可枚举类型 return myIEnumerable.GetEnumerator();//获取枚举器 } public IEnumerable<string> print()//IEnumerable<string>的意思为返回可枚举类型 { yield return str_1; yield return str_2; yield return str_3; } } class Program { static void Main(string[] args) { A obj = new A(); foreach (string str in obj)//也可以写成foreach (string str in obj.print()),因为print它返回的是可枚举类型 Console.WriteLine(str); Console.Read(); } } }
如果实现了GetEnumerator,让它调用迭代器方法以获取自动生成的实现IEnumrable的类实例。然后从IEnumerable对象返回由GetEnumrator创建的枚举器。

 

 

 

迭代器

标签:

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

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