Example #1
0
        public Argument <T> DefineOption <T>(string name, T defaultValue, Func <string, T> valueConverter, bool isRequired)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentException(Strings.NameMissing, "name");
            }

            if (DefinedParameters.Any())
            {
                throw new InvalidOperationException(Strings.OptionsMustBeDefinedBeforeParameters);
            }

            var names  = ParseOptionNameList(name);
            var option = new Argument <T>(_definedCommand, names, defaultValue, isRequired);

            _options.Add(option);

            if (_activeCommand != _definedCommand)
            {
                return(option);
            }

            try
            {
                if (Parser.TryParseOption(option.GetDisplayName(), option.Names, valueConverter, isRequired, out T value, out bool specified))
                {
                    option.SetValue(value);
                }
                else if (specified)
                {
                    // No value was provided, but the option was specified and a value wasn't required
                    option.MarkSpecified();
                }
            }