C# 迭代器

带泛型约束的使用方式

using System;
using System.Collections;
class App{
    public static void Main()
    {
         foreach (int number in SomeNumbers())
         {
             Console.WriteLine(number.ToString() + " ");
         }

        //Console.WriteLine(SomeNumbers().MoveNext());
        // Output: 3 5 8
        // Console.ReadKey();
    }

    public static IEnumerable<int> SomeNumbers()
    {
        yield return 3;
        yield return 5;
        yield return 8;
    }
}
using System;
using System.Collections;
class App{
    static void Main()
    {
        // foreach (int number in SomeNumbers())
        // {
        //     Console.WriteLine(number.ToString() + " ");
        // }
        //

        Console.WriteLine(SomeNumbers().GetEnumerator());
        IEnumerator enumerator= SomeNumbers().GetEnumerator();
        enumerator.MoveNext();
        Console.WriteLine(enumerator.Current);
        // Output: 3 5 8
        // Console.ReadKey();
    }

    public static IEnumerable<int> SomeNumbers()
    {
        yield return 3;
        yield return 5;
        yield return 8;
    }
}

 

 不带泛型约束的使用方式:

using System;
using System.Collections;
using System.Collections.Generic;
namespace App{
    class MyClass{
        public static void Main(string[] args){
            string[] arr={"mlh","1","4","21"};
            IEnumerator str = G().GetEnumerator();
            while(str.MoveNext()){
                Console.WriteLine(str.Current);
            }
        }
        public static IEnumerable G(){
            yield return 1;
            yield return 2;
        }
    }
}

 

 

GetEnumerator方法
using System;
using System.Collections;
namespace App{
    class MyClass{
        public static void Main(string[] args){
            int[] arr = {1,2,3};
            IEnumerator enumerator = arr.GetEnumerator();
            enumerator.MoveNext();//1
            Console.WriteLine(enumerator.Current);
            enumerator.MoveNext();
            Console.WriteLine(enumerator.Current); //2
        }
    }
}

 

IEnumerator 接口
#define debug
using System;
using System.Collections;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            IEnumerator bb = GetEnumerator ();
            while(bb.MoveNext()){
                Console.WriteLine(bb.Current);
            }
            Console.ReadKey();
        }
        public static IEnumerator GetEnumerator ()
        {
            yield return 1;
            yield return 1;
            yield return 1;
        }

    }
}

 

posted @ 2019-04-16 13:26  liliyou  阅读(115)  评论(0编辑  收藏  举报