C# 控制台行中的读取(未命名)参数
由于ConsoleFx似乎进展太慢(糟糕,它有很大的潜力),而且每次构建都会显示出太多破坏性的更改,我决定切换到Mono.Options以满足命令行解析的需要 我的OptionSet采用以下方法构建C# 控制台行中的读取(未命名)参数,c#,command-line,C#,Command Line,由于ConsoleFx似乎进展太慢(糟糕,它有很大的潜力),而且每次构建都会显示出太多破坏性的更改,我决定切换到Mono.Options以满足命令行解析的需要 我的OptionSet采用以下方法构建 private static OptionSet BuildOptionSet() { OptionSet optionSet = new OptionSet() .Add("?|help|h", "Prints out the options", option =>
private static OptionSet BuildOptionSet()
{
OptionSet optionSet = new OptionSet()
.Add("?|help|h", "Prints out the options", option => help = option != null)
.Add("w|wait", "Waits for any key after finished processing", option => wait)
return optionSet;
}
我找到的所有教程都涉及选项以及如何捕获它们,但从未提及参数
例如,下面的调用
c:\>test.exe brandCode1 brandCode2 /w
c:\>test.exe brandCode1 brandCode2/w
应该将wait设置为true,并给我两个值为brandCode1和brandCode2的参数。
如何从args[]以干净的方式捕获它们
这在Mono.Options中是不可能的吗?从阅读文档中可以看出,您需要在某个时候调用
OptionSet
的方法。当您这样做时,它会处理您的操作并返回“一个包含所有未处理参数的列表”
不幸的是,您还需要将main方法的参数传递给它,以使其工作
List<string> extra = optionSet.Parse(args);
List extra=optionstart.Parse(args);
编辑:如果我的链接(仍然)不起作用,parse应该链接到,从我阅读文档中可以看出,您需要在某个时候调用OptionSet
的方法。当您这样做时,它会处理您的操作并返回“一个包含所有未处理参数的列表”
不幸的是,您还需要将main方法的参数传递给它,以使其工作
List<string> extra = optionSet.Parse(args);
List extra=optionstart.Parse(args);
编辑:如果我的链接(仍然)不起作用,解析应该链接到这是真的。我想你也可以为未处理的选项设置一个处理程序,但我自己从来没有尝试过。老实说,我在这一次只使用了文档,因为我没有使用Mono选项,当我看到它在你运行parse时返回未处理的选项时,我只是认为这是唯一的方法。呵呵,我有,甚至在MS.NET中;)这似乎确实有效。遗憾的是,这将参数数量等的测试留给了客户机库。好的,没什么大不了的。另外,如果使用WriteOptionDescriptions(),则需要在上面添加未命名参数的描述。更糟糕的是,无法识别的选项列表将包含您没有明确添加到选项集中的所有内容。因此,在您的示例中,如果您说“test.exe brandCode1/x/w”,您将得到brandCode1和/x作为无法识别的选项:(这是真的。我想你也可以为未处理的选项设置一个处理程序,但我自己从来没有尝试过。老实说,我在这一次只使用了文档,因为我没有使用Mono选项,当我看到它在运行parse时返回未处理的选项时,我只是认为这是唯一的方法。呵呵,我有,甚至在MS.NET中;)这似乎确实有效。遗憾的是,这将参数数量等的测试留给了客户机库。好吧,没有什么大不了的。另外,如果使用WriteOptionDescriptions(),您需要在上面添加未命名参数的说明。更糟糕的是,未识别的选项列表将包含您未明确添加到选项集的所有内容。因此,在您的示例中,如果您说“test.exe brandCode1/x/w”,您将获得brandCode1和/x作为未识别的选项:(