/// <summary> /// Parses a commandline arguments and returns a new <see cref="ParsedOptionSet" /> with the result. /// </summary> /// <param name="args">An array of <see cref="string" /> objects with the commandline arguments, excluding the executable filename.</param> /// <returns> /// A new <see cref="ParsedOptionSet" /> with the parsed commandline. /// </returns> public ParsedOptionSet Parse(string[] args) { Check.ArgumentNull(args, nameof(args)); Check.ArgumentEx.ArrayValuesNotNull(args, nameof(args)); List <string> parsedArguments = new List <string>(); List <ParsedOption> parsedOptions = new List <ParsedOption>(); Option currentOption = null; List <string> currentOptionValues = new List <string>(); for (int i = 0; i < args.Length; i++) { SpecialStringComparisons comparison = OptionPrefixIgnoreCase ? SpecialStringComparisons.IgnoreCase : SpecialStringComparisons.None; Option option = Options.FirstOrDefault(o => o.Arguments.Any(a => args[i].Equals(OptionPrefix + a, comparison)) || o.Alternatives.Any(a => args[i].Equals(OptionAlternativePrefix + a, comparison)) ); if (option == null) { if (currentOption == null) { parsedArguments.Add(args[i]); } else { currentOptionValues.Add(args[i]); } } else { AddToCurrentOption(); currentOption = option; } } AddToCurrentOption(); return(new ParsedOptionSet(parsedArguments, parsedOptions)); void AddToCurrentOption() { if (currentOption != null) { parsedOptions.Add(new ParsedOption(currentOption, currentOptionValues.ToArray())); currentOptionValues.Clear(); } } }
/// <summary> /// Initializes a new instance of the <see cref="SpecialStringComparer" /> class with the specified comparison flags. /// </summary> /// <param name="comparison">The <see cref="SpecialStringComparisons" /> flags specifying what comparison properties apply.</param> public SpecialStringComparer(SpecialStringComparisons comparison) { Comparison = comparison; }