using System.Collections.Generic;
public static void Main()
var args = "--help".Split();
Console.WriteLine("Re-ordering options using RequiredThenAlphaComparison");
static void StartUp(string[] args)
var parser = new CommandLine.Parser(with => with.HelpWriter = null);
var parserResult = parser.ParseArguments<Options>(args);
parserResult.WithParsed<Options>(options => Run(options)).WithNotParsed(errs => DisplayHelp(parserResult, errs));
static void DisplayHelp<T>(ParserResult<T> result, IEnumerable<Error> errs)
var helpText = HelpText.AutoBuild(result, h =>
h.OptionComparison = HelpText.RequiredThenAlphaComparison;
Console.WriteLine(helpText);
static void Run(Options options)
static Comparison<ComparableOption> orderOnShortName = (ComparableOption attr1, ComparableOption attr2) =>
if (attr1.IsOption && attr2.IsOption)
if (attr1.Required && !attr2.Required)
else if (!attr1.Required && attr2.Required)
if (string.IsNullOrEmpty(attr1.ShortName) && !string.IsNullOrEmpty(attr2.ShortName))
else if (!string.IsNullOrEmpty(attr1.ShortName) && string.IsNullOrEmpty(attr2.ShortName))
return String.Compare(attr1.ShortName, attr2.ShortName, StringComparison.Ordinal);
else if (attr1.IsOption && attr2.IsValue)
[Option('r', "read", Required = false, HelpText = "Input files to be processed.")]
public IEnumerable<string> InputFiles
[Option('b', "verbose", Default = false, HelpText = "Prints all messages to standard output.")]
[Option('i', "stdin", Default = false, HelpText = "Read from stdin")]
[Value(0, MetaName = "offset", HelpText = "File offset.")]