zoukankan      html  css  js  c++  java
  • C#拾遗系列(6):迭代器

    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[i];

                }

            }

            #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. 输出

    image

    扫码关注公众号,了解更多管理,见识,育儿等内容

    作者: 王德水
    出处:http://www.cnblogs.com/cnblogsfans
    版权:本文版权归作者所有,转载需经作者同意。

  • 相关阅读:
    Codeforces Round #702 (Div. 3) 题解
    Educational Codeforces Round 104 (Rated for Div. 2) A~E题解
    AtCoder Regular Contest 112 A~D题解
    Codeforces Round #701 (Div. 2) A~E 题解
    java String, StringBuffer, StringBuilder简单介绍和使用
    货仓选址
    线程的同步
    数据结构课设作业
    线程的生命周期(java 图)
    JAVA多线程的创建和使用
  • 原文地址:https://www.cnblogs.com/cnblogsfans/p/1222099.html
Copyright © 2011-2022 走看看