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