labmda式で再帰呼び出し

※一発ネタです。本気で読まないようにしてください。(^^;

lambda式で再帰呼び出しするには、先に式を格納する変数を初期化する必要があります。

using System;

namespace LambdaSample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 再起呼び出しのために、timesをnullで初期化
            // 本当は、Action<int> times = (n) => {...}と書きたい
            Action<int> times = null;
            times = (n) =>
            {
                if (n > 0)
                {
                    Console.WriteLine("Hello, World");
                    // 再起呼び出し
                    times(--n);
                }
            };

            times(10);
        }
    }
}

↑こんな感じ。

でも、本当は、

Action times = (n) => {...};

このように書きたいですよね。と、言うわけで、

using System;

namespace LambdaSample
{
    class Program
    {
        static void Main(string[] args)
        {
            Action<int> times = (x) =>
            {
                times = null;
                times = (a) =>
                {
                    if (a > 0)
                    {
                        Console.WriteLine("Hello, World");
                        times(--a);
                    }
                };

                times(x);
            };

            times(10);
        }
    }
}

・・・目的と手段を取り違えていますね。(^^;