/// <summary> /// Parses the given arguments into a filled option object. /// </summary> /// <param name="args">the arguments to parse</param> /// <returns>The parsed result</returns> /// <see cref="ParseResult"/> public ParseResult Parse(params string[] args) { if (args == null) { throw new ArgumentNullException(nameof(args)); } var queue = new Queue <string>(args); var result = new ParseResult { Parser = this }; var optionType = OptionType; if (OptionTypes.Count > 1) { if (queue.Count == 0) { result.SetState(State.MissingVerb, "no verb given"); } else { var verb = queue.Dequeue(); if (verb == "") { result.SetState(State.MissingVerb, "empty verb"); } else if (IsHelp(verb)) { result.SetState(State.RequestHelp); } else { if (!OptionTypes.TryGetValue(verb, out optionType)) { result.SetState(State.MissingVerb, $"verb '{args[0]}' not defined"); } result.Verb = verb; } } } if (result.State == State.Succeeded) { optionType.Parse(result, queue); } return(result); }