Marks an Action method parameter as optional
Inheritance: ParameterAttribute
コード例 #1
0
ファイル: NConsoler.cs プロジェクト: realM4C/thumbgen
        private static void CheckOptionalParametersAltNamesAreNotDuplicated(MethodBase method)
        {
            List <string> parameterNames = new List <string>();

            foreach (ParameterInfo parameter in method.GetParameters())
            {
                if (IsRequired(parameter))
                {
                    parameterNames.Add(parameter.Name.ToLower());
                }
                else
                {
                    if (parameterNames.Contains(parameter.Name.ToLower()))
                    {
                        throw new NConsolerException("Found duplicated parameter name \"{0}\" in method \"{1}\". Please check alt names for optional parameters", parameter.Name, method.Name);
                    }
                    parameterNames.Add(parameter.Name.ToLower());
                    OptionalAttribute optional = GetOptional(parameter);
                    foreach (string altName in optional.AltNames)
                    {
                        if (parameterNames.Contains(altName.ToLower()))
                        {
                            throw new NConsolerException("Found duplicated parameter name \"{0}\" in method \"{1}\". Please check alt names for optional parameters", altName, method.Name);
                        }
                        parameterNames.Add(altName.ToLower());
                    }
                }
            }
        }
コード例 #2
0
ファイル: NConsoler.cs プロジェクト: realM4C/thumbgen
        private void CheckUnknownParametersAreNotPassed(MethodInfo method)
        {
            List <string> parameterNames = new List <string>();

            foreach (ParameterInfo parameter in method.GetParameters())
            {
                if (IsRequired(parameter))
                {
                    continue;
                }
                parameterNames.Add(parameter.Name.ToLower());
                OptionalAttribute optional = GetOptional(parameter);
                foreach (string altName in optional.AltNames)
                {
                    parameterNames.Add(altName.ToLower());
                }
            }
            foreach (string optionalParameter in OptionalParameters(method))
            {
                string name = ParameterName(optionalParameter);
                if (!parameterNames.Contains(name.ToLower()))
                {
                    throw new NConsolerException("Unknown parameter name {0}", optionalParameter);
                }
            }
        }
コード例 #3
0
ファイル: NConsoler.cs プロジェクト: realM4C/thumbgen
        private object[] BuildParameterArray(MethodInfo method)
        {
            int           argumentIndex   = IsMulticommand ? 1 : 0;
            List <object> parameterValues = new List <object>();
            Dictionary <string, ParameterData> aliases = new Dictionary <string, ParameterData>();

            foreach (ParameterInfo info in method.GetParameters())
            {
                if (IsRequired(info))
                {
                    parameterValues.Add(ConvertValue(_args[argumentIndex], info.ParameterType));
                }
                else
                {
                    OptionalAttribute optional = GetOptional(info);

                    foreach (string altName in optional.AltNames)
                    {
                        aliases.Add(altName.ToLower(),
                                    new ParameterData(parameterValues.Count, info.ParameterType));
                    }
                    aliases.Add(info.Name.ToLower(),
                                new ParameterData(parameterValues.Count, info.ParameterType));
                    parameterValues.Add(optional.Default);
                }
                argumentIndex++;
            }
            foreach (string optionalParameter in OptionalParameters(method))
            {
                string name  = ParameterName(optionalParameter);
                string value = ParameterValue(optionalParameter);
                parameterValues[aliases[name].position] = ConvertValue(value, aliases[name].type);
            }
            return(parameterValues.ToArray());
        }
コード例 #4
0
ファイル: NConsoler.cs プロジェクト: vishalishere/NCrawler
        private static void CheckOptionalParametersDefaultValuesAreAssignableToRealParameterTypes(MethodBase method)
        {
            foreach (ParameterInfo parameter in method.GetParameters())
            {
                if (IsRequired(parameter))
                {
                    continue;
                }

                OptionalAttribute optional = GetOptional(parameter);
                if (optional.Default != null && optional.Default.GetType() == typeof(string) &&
                    CanBeConvertedToDate(optional.Default.ToString()))
                {
                    return;
                }

                if ((optional.Default == null && !CanBeNull(parameter.ParameterType)) ||
                    (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);
                }
            }
        }
コード例 #5
0
 private static void CheckOptionalParametersDefaultValuesAreAssignableToRealParameterTypes(MethodBase method)
 {
     foreach (ParameterInfo parameter in method.GetParameters())
     {
         if (IsRequired(parameter))
         {
             continue;
         }
         OptionalAttribute optional = GetOptional(parameter);
         if (!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);
         }
     }
 }
コード例 #6
0
ファイル: NConsoler.cs プロジェクト: realM4C/thumbgen
        private static string GetDisplayName(ParameterInfo parameter)
        {
            if (IsRequired(parameter))
            {
                return(parameter.Name);
            }
            OptionalAttribute optional      = GetOptional(parameter);
            string            parameterName =
                (optional.AltNames.Length > 0) ? optional.AltNames[0] : parameter.Name;

            if (parameter.ParameterType != typeof(bool))
            {
                parameterName += ":" + ValueDescription(parameter.ParameterType);
            }
            return("[/" + parameterName + "]");
        }