本物Iterator

3/29の似非Iteratorをgmcsで書き直してみました。

using System;
using System.Collections;

class MyApp {
    static IEnumerator Fibonacci() {
        int a = 0, b = 1, t;
        while (true) {
            yield return b;
            t = a;
            a = b;
            b = t + b;
        }
    }

    static void Main() {
        IEnumerator fib = Fibonacci();
        // フィボナッチ数列の最初の要素
        fib.MoveNext();
        Console.WriteLine(fib.Current);
        // フィボナッチ数列の次の要素
        fib.MoveNext();
        Console.WriteLine(fib.Current);

        Console.WriteLine("Hit any key!");
        Console.ReadLine();

        // 更に10個
        for (int i = 0; i < 10; ++i) {
            fib.MoveNext();
            Console.WriteLine(fib.Current);
        }
        Console.WriteLine("\nHit any key!");
        Console.ReadLine();

        // おまけにもう一つ
        fib.MoveNext();
        Console.WriteLine(fib.Current);
    }
}

ほとんど同じように組めますね。ウソを吐かずに済みました(^^;