wangdeshui 发表于 2013-2-5 01:38:08

C#拾遗系列(6):迭代器

<div style="">1. 示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
 
namespace NetTest
{
  public  class TestIteration
    {
 
        public void Test()
        {
            SevenColor colorIteration = new SevenColor();
            foreach (string p in colorIteration)
            {
                Console.Out.WriteLine(p);
            }
            Console.Out.WriteLine("-------------Desc-------------------");
            foreach (string c in colorIteration.DescColorIteration(1, 5))
            {
                Console.Out.WriteLine(c);
            }
            Console.Out.WriteLine("--------------multi yield---------");
            foreach (string c in colorIteration.GetMutipleYied())
            {
                Console.Out.WriteLine(c);
            }
        }
    }
 
    public class SevenColor : IEnumerable
    {
        string[] mColor={"red","orange","yellow","green","cyan","blue","purple"};
        #region IEnumerable Members
        /*
        迭代器代码使用 yield return 语句依次返回每个元素。yield break 将终止迭代。
        可以在类中实现多个迭代器。每个迭代器都必须像任何类成员一样有唯一的名称,
        并且可以在 foreach 语句中被客户端代码调用,如下所示:foreach(int x in SampleClass.Iterator2){}
        */
        public IEnumerator GetEnumerator()
        {
            for (int i = 0; i < mColor.Length; i++)
            {
                yield return mColor;
            }
        }
        #endregion
 
        //注意,这里返回的是IEnumerable
        public System.Collections.IEnumerable DescColorIteration(int start, int end)
        {
            for (int i = 0; i <=end; i++)
            {
                yield return mColor;
            }
        }
        //在 foreach 循环的每次后续迭代(或对 IEnumerator.MoveNext 的直接调用)中,
        //下一个迭代器代码体将从前一个 yield 语句之后开始,并继续下一个语句直至到达迭代器体的结尾或遇到 yield break 语句
        public IEnumerable GetMutipleYied()
        {
            yield return "hello";
            yield return "I am";
            yield return "Jack";
            yield return "wang";
        }
    }
}
 
2. 输出
http://www.cnblogs.com/images/cnblogs_com/cnblogsfans/WindowsLiveWriter/C6_141A5/image_thumb.png
页: [1]
查看完整版本: C#拾遗系列(6):迭代器