public static void Main()
Func<int,int,int,int> distance = (x, y, z) => x + y + z;
int x = Get(distance).From(1).To(2).On(3);
Console.WriteLine("Get(distance).From(1).To(2).On(3) => {0}", x);
public static class Utils
public static Get2<T1, T2, T3, T4> Get<T1, T2, T3, T4>(Func<T1, T2, T3, T4> f)
return new Get2<T1, T2, T3, T4>(f);
public class Get2<T1, T2, T3, T4>
private Func<T1, T2, T3, T4> _f;
internal Get2(Func<T1, T2, T3, T4> f)
internal Get2<T1, T2, T3, T4> _b;
public B1(Get2<T1, T2, T3, T4> b, T1 x)
public static implicit operator T4(B3 b3)
return b3._b._b._b._f(b3._b._b._x, b3._b._y, b3._z);