using System; static class C { public static Func<T1, Func<T2, Action<T3>>> Curry<T1, T2, T3> (this Action<T1, T2, T3> self) { return value1 => value2 => value3 => self (value1, value2, value3); } } class Test { public static int Main () { Action<int, int, int> test = (x, y, z) => { int i = x + y + z; Console.WriteLine (i); if (i != 19) throw null; }; Func<int, Func<int, Action<int>>> f = test.Curry (); f (3) (5) (11); return 0; } }