private static bool ParseCommandGroups <TOptions>(string[] args, ref TOptions options, TypeArgumentInfo arguments) where TOptions : new() { if (arguments.ActionArgument == null) { throw new ArgumentException("Cannot have groups unless Command argument has been specified"); } if (args.Length == 0) { throw new ArgumentException("Required parameters have not been specified"); } // parse based on the command passed in (the first arg). if (!arguments.ArgumentGroups.ContainsKey(args[0])) { throw new ArgumentException($"Unknown command [Cyan!{args[0]}]"); } // short circuit the request for help! if (args.Length == 2 && (args[1] == "/?" || args[1] == "-?")) { HelpGenerator.DisplayHelpForCommmand(args[0], arguments.ArgumentGroups[args[0]]); return(false); } options = InternalParse <TOptions>(args, 1, arguments.ArgumentGroups[args[0]]); arguments.ActionArgument.SetValue(options, PropertyHelpers.GetValueAsType(args[0], arguments.ActionArgument)); return(true); }