예제 #1
0
        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);
                }
            }
        }
예제 #2
0
        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());
        }
예제 #3
0
 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);
         }
     }
 }