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); } } }
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); } } }