Skip to content

Instantly share code, notes, and snippets.

@JoeRobich
Created June 20, 2014 19:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JoeRobich/2e05c7cefbac897928f4 to your computer and use it in GitHub Desktop.
Save JoeRobich/2e05c7cefbac897928f4 to your computer and use it in GitHub Desktop.
Methods that allow partial application of arguments to a function.
public class Func
{
//Two Params
public static Func<T2, TR> Apply<T1, T2, TR>(Func<T1, T2, TR> func, T1 arg1)
{
return (arg2) => func(arg1, arg2);
}
//Three Params
public static Func<T2, T3, TR> Apply<T1, T2, T3, TR>(Func<T1, T2, T3, TR> func, T1 arg1)
{
return (arg2, arg3) => func(arg1, arg2, arg3);
}
public static Func<T3, TR> Apply<T1, T2, T3, TR>(Func<T1, T2, T3, TR> func, T1 arg1, T2 arg2)
{
return (arg3) => func(arg1, arg2, arg3);
}
//Four Params
public static Func<T2, T3, T4, TR> Apply<T1, T2, T3, T4, TR>(Func<T1, T2, T3, T4, TR> func, T1 arg1)
{
return (arg2, arg3, arg4) => func(arg1, arg2, arg3, arg4);
}
public static Func<T3, T4, TR> Apply<T1, T2, T3, T4, TR>(Func<T1, T2, T3, T4, TR> func, T1 arg1, T2 arg2)
{
return (arg3, arg4) => func(arg1, arg2, arg3, arg4);
}
public static Func<T4, TR> Apply<T1, T2, T3, T4, TR>(Func<T1, T2, T3, T4, TR> func, T1 arg1, T2 arg2, T3 arg3)
{
return (arg4) => func(arg1, arg2, arg3, arg4);
}
//Five Params
public static Func<T2, T3, T4, T5, TR> Apply<T1, T2, T3, T4, T5, TR>(Func<T1, T2, T3, T4, T5, TR> func, T1 arg1)
{
return (arg2, arg3, arg4, arg5) => func(arg1, arg2, arg3, arg4, arg5);
}
public static Func<T3, T4, T5, TR> Apply<T1, T2, T3, T4, T5, TR>(Func<T1, T2, T3, T4, T5, TR> func, T1 arg1, T2 arg2)
{
return (arg3, arg4, arg5) => func(arg1, arg2, arg3, arg4, arg5);
}
public static Func<T4, T5, TR> Apply<T1, T2, T3, T4, T5, TR>(Func<T1, T2, T3, T4, T5, TR> func, T1 arg1, T2 arg2, T3 arg3)
{
return (arg4, arg5) => func(arg1, arg2, arg3, arg4, arg5);
}
public static Func<T5, TR> Apply<T1, T2, T3, T4, T5, TR>(Func<T1, T2, T3, T4, T5, TR> func, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
{
return (arg5) => func(arg1, arg2, arg3, arg4, arg5);
}
//Six Params
public static Func<T2, T3, T4, T5, T6, TR> Apply<T1, T2, T3, T4, T5, T6, TR>(Func<T1, T2, T3, T4, T5, T6, TR> func, T1 arg1)
{
return (arg2, arg3, arg4, arg5, arg6) => func(arg1, arg2, arg3, arg4, arg5, arg6);
}
public static Func<T3, T4, T5, T6, TR> Apply<T1, T2, T3, T4, T5, T6, TR>(Func<T1, T2, T3, T4, T5, T6, TR> func, T1 arg1, T2 arg2)
{
return (arg3, arg4, arg5, arg6) => func(arg1, arg2, arg3, arg4, arg5, arg6);
}
public static Func<T4, T5, T6, TR> Apply<T1, T2, T3, T4, T5, T6, TR>(Func<T1, T2, T3, T4, T5, T6, TR> func, T1 arg1, T2 arg2, T3 arg3)
{
return (arg4, arg5, arg6) => func(arg1, arg2, arg3, arg4, arg5, arg6);
}
public static Func<T5, T6, TR> Apply<T1, T2, T3, T4, T5, T6, TR>(Func<T1, T2, T3, T4, T5, T6, TR> func, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
{
return (arg5, arg6) => func(arg1, arg2, arg3, arg4, arg5, arg6);
}
public static Func<T6, TR> Apply<T1, T2, T3, T4, T5, T6, TR>(Func<T1, T2, T3, T4, T5, T6, TR> func, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)
{
return (arg6) => func(arg1, arg2, arg3, arg4, arg5, arg6);
}
//Sever Params
public static Func<T2, T3, T4, T5, T6, T7, TR> Apply<T1, T2, T3, T4, T5, T6, T7, TR>(Func<T1, T2, T3, T4, T5, T6, T7, TR> func, T1 arg1)
{
return (arg2, arg3, arg4, arg5, arg6, arg7) => func(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
}
public static Func<T3, T4, T5, T6, T7, TR> Apply<T1, T2, T3, T4, T5, T6, T7, TR>(Func<T1, T2, T3, T4, T5, T6, T7, TR> func, T1 arg1, T2 arg2)
{
return (arg3, arg4, arg5, arg6, arg7) => func(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
}
public static Func<T4, T5, T6, T7, TR> Apply<T1, T2, T3, T4, T5, T6, T7, TR>(Func<T1, T2, T3, T4, T5, T6, T7, TR> func, T1 arg1, T2 arg2, T3 arg3)
{
return (arg4, arg5, arg6, arg7) => func(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
}
public static Func<T5, T6, T7, TR> Apply<T1, T2, T3, T4, T5, T6, T7, TR>(Func<T1, T2, T3, T4, T5, T6, T7, TR> func, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
{
return (arg5, arg6, arg7) => func(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
}
public static Func<T6, T7, TR> Apply<T1, T2, T3, T4, T5, T6, T7, TR>(Func<T1, T2, T3, T4, T5, T6, T7, TR> func, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)
{
return (arg6, arg7) => func(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
}
public static Func<T7, TR> Apply<T1, T2, T3, T4, T5, T6, T7, TR>(Func<T1, T2, T3, T4, T5, T6, T7, TR> func, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)
{
return (arg7) => func(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment