ラムダ式をAction<T>と組み合わせてみたら
以前やってたアレ(Action<T>を使い倒してみる - パジャマdeブロッガー(myugaruのヲタ日記))をラムダ式で表すとかなりすっきりとすることがわかった。たとえばx7のときは匿名メソッドだとこうなる。
Action<Action<Action<Action<Action<Action<Action<string>>>>>>> x7 = delegate(Action<Action<Action<Action<Action<Action<string>>>>>> p1) { p1(delegate(Action<Action<Action<Action<string>>>> p2) { p2(delegate(Action<Action<string>> p3) { p3(Console.WriteLine); }); }); }; x7(delegate(Action<Action<Action<Action<Action<string>>>>> p1) { p1(delegate(Action<Action<Action<string>>> p2) { p2(delegate(Action<string> p3) { p3("test"); }); }); });
Action<Action<Action<Action<Action<Action<Action<string>>>>>>> x7 = p1 => p1(p2 => p2(p3 => p3(Console.WriteLine))); x7(p1 => p1(p2 => p2(p3 => p3("test"))));
おもしろいのでこういうのも作ってみた。さて結果は何が表示されるだろう?解読できますかな?(笑
delegate T Act<T>(T p); static void Main(string[] args) { Act<Act<Act<Act<Act<Act<Act<Act<int>>>>>>>> x8 = a => b => c => d => e => f => g => h => 8; Console.WriteLine(x8 (a => b => c => d => e => f => g => 7) (a => b => c => d => e => f => 6) (a => b => c => d => e => 5) (a => b => c => d => 4) (a => b => c => 3) (a => b => 2) (a => 1) (0)); Console.ReadLine(); }