internal static object Invoke(this Delegate target, object[] arguments) { if (target.Arity() == 1) { var param = target.Method.GetParameters()[0].ParameterType; if (param.TypeIsArray() && (arguments.Length != 1 || arguments.Length == 1 && (arguments[0].IsNotNull() && !arguments[0].IsArray()))) { arguments = new[] { arguments }; } } try { return(target.DynamicInvoke(arguments.Clip(target))); } catch (TargetInvocationException ex) { throw ex.InnerException; } }