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); } } }
↑こんな感じ。
でも、本当は、
Actiontimes = (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); } } }
・・・目的と手段を取り違えていますね。(^^;