RxでFizzBuzz

難しそうでずっと敬遠してたReactive Extensionsをやっとこさ勉強しよういう気になって、理解のとっかかりにFizzBuzzなぞ。
C#での最短はよこけんさんのブログにあるやつだろうけど、なんかRxでやってみたくなってサブスクライブっちゃった。反省はしていません。

using System;
using System.Reactive.Linq;

namespace ConsoleApplication14
{
    class Program
    {
        static void Main(string[] args)
        {
            var line = Observable.Range(1, 100);
            var fizz = line.Where(a => a % 3 == 0).Select(_ => "Fizz");
            var buzz = line.Where(a => a % 5 == 0).Select(_ => "Buzz");
            var number = line.Where(a => a % 3 * a % 5 > 0).Select(a => a.ToString());

            fizz.Merge(buzz)
                .Merge(number)
                .Merge(line.Select(_ => "\r\n"))
                .Subscribe(a => Console.Write(a));
        }
    }
}

あらま、forとかforeach無しで行けるなんてステキ。

ちなみに、Reactive Extensionについての説明はneueさんのサイトがとても詳しいです。