六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 78|回复: 0

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

[复制链接]

升级  77.33%

136

主题

136

主题

136

主题

举人

Rank: 3Rank: 3

积分
432
 楼主| 发表于 2013-1-27 04:40:50 | 显示全部楼层 |阅读模式
<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[end-i];
            }
        }
        //在 foreach 循环的每次后续迭代(或对 IEnumerator.MoveNext 的直接调用)中,
        //下一个迭代器代码体将从前一个 yield 语句之后开始,并继续下一个语句直至到达迭代器体的结尾或遇到 yield break 语句
        public IEnumerable GetMutipleYied()
        {
            yield return "hello";
            yield return "I am";
            yield return "Jack";
            yield return "wang";
        }
    }
}
 
2. 输出
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表