IEnumerable in c#

using System;
using System.Collections;
using System.Threading;

namespace CSharpBasics
{

    //http://www.yoda.arachsys.com/csharp/csharp2/iterators.html

    class IEnumerableCls
    {

        public void iterateIenumerable()
        {
            Console.WriteLine("Ienum1---");
            foreach (string s in new Ienum1())
                Console.WriteLine("    " + s);

            Console.WriteLine("Ienum2---");
            Ienum2 ie2 = new Ienum2();
            new Thread(new ThreadStart(delegate()
            {
                Thread.Sleep(500);
                ie2.stop = true; //As we are setting stop to be true here, so Ienum2 should return yield break and set the end of enumerator.
            })).Start();

            foreach (string s in ie2)
                Console.WriteLine("    " + s);
        }

        
    }

    //yield return (for returning the next item) and 
    //yield break (to signify the end of the iterator). 
    public class Ienum1 : IEnumerable
    {
        #region IEnumerable Members

        public IEnumerator GetEnumerator()
        {
            yield return "First Obj"; //yield return stores the state of Ienumerator in the compiler
            yield return "second cObj";
        }

        #endregion
    }

    class Ienum2 : IEnumerable
    {

        //The ****VOLATILE**** keyword indicates that a field can be modified in the program 
        //by something such as the operating system, the hardware, 
        //or a concurrently executing thread.
        public volatile bool stop = false;

        #region IEnumerable Members

        public IEnumerator GetEnumerator()
        {
            for (int i = 0; i < 100; i++)
            {
                for (int j = 0; j < 100; j++)
                {
                    Thread.Sleep(50);
                    if (stop == true)
                        yield break;
                    yield return string.Format("{0}-{1}", i, j);
                }
            }
        }

        #endregion
    }

}
Add Comments :

Login

Register