using System; namespace Cute; public static class EventExtension { public static void Call(this Action action) { action?.Invoke(); } public static void Call(this Action action, T1 arg1) { action?.Invoke(arg1); } public static void Call(this Action action, T1 arg1, T2 arg2) { action?.Invoke(arg1, arg2); } public static void Call(this Action action, T1 arg1, T2 arg2, T3 arg3) { action?.Invoke(arg1, arg2, arg3); } public static void Call(this Action action, T1 arg1, T2 arg2, T3 arg3, T4 arg4) { action?.Invoke(arg1, arg2, arg3, arg4); } public static void Call(this Action action, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5) { action?.Invoke(arg1, arg2, arg3, arg4, arg5); } public static void Call(this Action action, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6) { action?.Invoke(arg1, arg2, arg3, arg4, arg5, arg6); } public static void Call(this Action action, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7) { action?.Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7); } public static void Call(this Action action, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8) { action?.Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); } public static void Call(this Action action, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9) { action?.Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); } public static TR Call(this Func func) { if (func == null) { return default(TR); } return func(); } public static TR Call(this Func func, T1 arg1) { if (func == null) { return default(TR); } return func(arg1); } public static TR Call(this Func func, T1 arg1, T2 arg2) { if (func == null) { return default(TR); } return func(arg1, arg2); } public static TR Call(this Func func, T1 arg1, T2 arg2, T3 arg3) { if (func == null) { return default(TR); } return func(arg1, arg2, arg3); } public static TR Call(this Func func, T1 arg1, T2 arg2, T3 arg3, T4 arg4) { if (func == null) { return default(TR); } return func(arg1, arg2, arg3, arg4); } public static TR Call(this Func func, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5) { if (func == null) { return default(TR); } return func(arg1, arg2, arg3, arg4, arg5); } public static TR[] GetAllFuncCallResults(this Func func) { if (func == null) { return new TR[0]; } return CallAllFunc(func, (Delegate f) => ((Func)f)()); } public static TR[] GetAllFuncCallResults(this Func func, T1 arg1) { if (func == null) { return new TR[0]; } return CallAllFunc(func, (Delegate f) => ((Func)f)(arg1)); } public static TR[] GetAllFuncCallResults(this Func func, T1 arg1, T2 arg2) { if (func == null) { return new TR[0]; } return CallAllFunc(func, (Delegate f) => ((Func)f)(arg1, arg2)); } public static TR[] GetAllFuncCallResults(this Func func, T1 arg1, T2 arg2, T3 arg3) { if (func == null) { return new TR[0]; } return CallAllFunc(func, (Delegate f) => ((Func)f)(arg1, arg2, arg3)); } private static TR[] CallAllFunc(Delegate func, Func call) { Delegate[] invocationList = func.GetInvocationList(); int num = invocationList.Length; TR[] array = new TR[num]; for (int i = 0; i < num; i++) { TR val = call(invocationList[i]); array[i] = val; } return array; } }