System.ComponentModel.Navigation.ActionDescriptor.Invoke C# (CSharp) Method

Invoke() public method

public Invoke ( Controller controller, ActionInvocation action ) : object
controller Controller
action ActionInvocation
return object
        public object Invoke(Controller controller, ActionInvocation action)
        {
            ParameterInfo[] parameters = _actionMethod.GetParameters();
            object[] parameterValues = null;

            if (parameters.Length != 0) {
                List<object> parameterList = new List<object>(parameters.Length);

                int paramIndex = 0;
                for (; paramIndex < action.Parameters.Count && paramIndex < parameters.Length; paramIndex++) {
                    parameterList.Add(action.Parameters[paramIndex]);
                }

                for (; paramIndex < parameters.Length; paramIndex++) {
                    string paramName = parameters[paramIndex].Name;
                    string paramValue = null;

                    action.NamedParameters.TryGetValue(paramName, out paramValue);
                    parameterList.Add(paramValue);
                }

                for (int i = 0; i < parameterList.Count; i++) {
                    Type parameterType = parameters[i].ParameterType;

                    object paramValue = parameterList[i];
                    if ((paramValue == null) || (parameterType.IsAssignableFrom(paramValue.GetType()) == false)) {
                        paramValue = Convert.ChangeType(paramValue, parameterType, CultureInfo.CurrentCulture);
                        parameterList[i] = paramValue;
                    }
                }

                parameterValues = parameterList.ToArray();
            }

            return _actionMethod.Invoke(controller, parameterValues);
        }