三角数を求める(コルーチンの練習)

三角数 - Wikipediaを求めるプログラム。C# のコルーチンの練習。

using System;
using System.Collections.Generic;
using System.Linq;

public class TestTriangles {
    static IEnumerable<int> Triangles() {
        int x = 0;
        for (int i = 1; /* none */; i++) {
            x += i;
            yield return x;
        }
    }

    static void Test1() {
        var e = Triangles().GetEnumerator();
        for (int i = 0; i < 10 && e.MoveNext(); i++) {
            Console.Write(e.Current + " ");
        }
        Console.WriteLine();
    }

    static void Test2() {
        int n = 0;
        foreach (int t in Triangles()) {
            Console.Write(t + " ");
            if (10 == ++n) break;
        }
        Console.WriteLine();
    }

    static void Test3() {
        foreach (int t in Triangles().Take(10)) { // System.Linq
            Console.Write(t + " ");
        }
        Console.WriteLine();
    }

    public static void Main() {
        Test1();
        Test2();
        Test3();
    }
}

実行結果:

% dmcs triangles.cs
% mono triangles.exe
1 3 6 10 15 21 28 36 45 55
1 3 6 10 15 21 28 36 45 55
1 3 6 10 15 21 28 36 45 55
  • System.Linq はまだよく理解していない。