public void Test1() { var args = from h in Arg.Flag("h") join v in Arg.Flag("V") on 1 equals 1 join vl in Arg.CountedFlag("verbose").ShortName('v') on 1 equals 1 join foo in Arg.Option("foo", -1, Parser.Int32()).List() on 1 equals 1 join bar in Arg.Flag("bar") on 1 equals 1 join baz in Arg.Option("baz", Parser.Int32().Nullable()) on 1 equals 1 join qux in Arg.Option("qux", "?", Parser.String()) on 1 equals 1 join opt1 in Arg.Option("opt-1", "?", Parser.String()).ShortName('o').DefaultValue().List() on 1 equals 1 join opt2 in Arg.Option("opt-2", "?", Parser.String()).DefaultValue() on 1 equals 1 join opt3 in Arg.Option("opt-3", "?", Parser.String()).DefaultValue() on 1 equals 1 join opt4 in Arg.Option("opt-4", Parser.String()).DefaultValue() on 1 equals 1 join xs in Arg.Option("x", Parser.String()).List() on 1 equals 1 join @int in Arg.IntOpt("int") on 1 equals 1 join pos1 in Arg.Operand("x", Parser.String()) on 1 equals 1 join pos2 in Arg.Operand("x", Parser.String()) on 1 equals 1 join flag in Arg.Flag("f").List() on 1 equals 1 join m in Arg.Macro("macro", s => "-v there".Split()) on 1 equals 1 join page in Arg.Flag("p|page").Negatable(true).List() on 1 equals 1 select new { Verbosity = vl, Foo = foo, Bar = bar, Baz = baz, Qux = qux, Opt1 = opt1, Opt2 = opt2, Opt3 = opt3, Opt4 = opt4, X = string.Join(",", xs), Int = @int, Pos1 = pos1, Pos2 = pos2, Flag = flag, Macro = m, Page = page, }; var commandLine = @" 1 --bar -v -v -v --foo 4 2 hello -ofoo -obar -o --opt-1=baz -vo -vovo @some_macro --foo 2 -x one -42 -x two - world -x three -xfour -f -f -ff -f+ -f- -f-f+ -f+f- -ff- -f+vf- -v- --verbose --verbose+ --verbose- -p --page -p+ -p- --no-page --opt-2 --opt-3=foo " .Split((char[])null, StringSplitOptions.RemoveEmptyEntries); var(result, tail) = CommandLine.Bind(args, commandLine); Assert.That(result.Verbosity, Is.EqualTo(7)); Assert.That(result.Foo, Is.EqualTo(new[] { 4, 2 })); Assert.That(result.Bar, Is.True); Assert.That(result.Baz, Is.Null); Assert.That(result.Qux, Is.EqualTo("?")); Assert.That(result.Opt1, Is.EqualTo(new[] { (true, "foo"), (true, "bar"), (true, "?"), (true, "baz"), (true, "?"), (true, "vo") }));