private void CheckUnknownParametersAreNotPassed(MethodInfo method) { var parameterNames = new List <string>(); foreach (ParameterInfo parameter in method.GetParameters()) { if (_metadata.IsRequired(parameter)) { continue; } parameterNames.Add(parameter.Name.ToLower()); var optional = _metadata.GetOptional(parameter); foreach (string altName in optional.AltNames) { parameterNames.Add(altName.ToLower()); } } foreach (var optionalParameter in OptionalParameters(method)) { string name = ParameterName(optionalParameter); if (!parameterNames.Contains(name.ToLower())) { throw new NConsolerException("Unknown parameter name {0}", optionalParameter); } } }
public object[] BuildParameterArray(MethodInfo method) { var optionalValues = new Dictionary <string, string>(); for (var i = 0; i < _args.Length - _metadata.RequiredParameterCount(method); i += 2) { optionalValues.Add(_args[i].Substring(1), _args[i + 1]); } var parameters = method.GetParameters(); var parameterValues = parameters.Select(p => (object)null).ToList(); var requiredStartIndex = _args.Length - _metadata.RequiredParameterCount(method); var requiredValues = _args.Where((a, i) => i >= requiredStartIndex).ToList(); for (var i = 0; i < requiredValues.Count; i++) { parameterValues[i] = StringToObject.ConvertValue(requiredValues[i], parameters[i].ParameterType); } for (var i = _metadata.RequiredParameterCount(method); i < parameters.Length; i++) { var optional = _metadata.GetOptional(parameters[i]); if (optionalValues.ContainsKey(parameters[i].Name)) { parameterValues[i] = StringToObject.ConvertValue(optionalValues[parameters[i].Name], parameters[i].ParameterType); } else { parameterValues[i] = optional.Default; } } return(parameterValues.ToArray()); }
private void CheckOptionalParametersDefaultValuesAreAssignableToRealParameterTypes(MethodBase method) { foreach (ParameterInfo parameter in method.GetParameters()) { if (_metadata.IsRequired(parameter)) { continue; } var optional = _metadata.GetOptional(parameter); if (optional.Default != null && optional.Default.GetType() == typeof(string) && StringToObject.CanBeConvertedToDate(optional.Default.ToString())) { return; } if ((optional.Default == null && !parameter.ParameterType.CanBeNull()) || (optional.Default != null && !optional.Default.GetType().IsAssignableFrom(parameter.ParameterType))) { throw new NConsolerException( "Default value for an optional parameter \"{0}\" in method \"{1}\" can not be assigned to the parameter", parameter.Name, method.Name); } } }