Rat*_*eek 6 c# command-line-arguments command-line-parsing
我正在使用NDesk.Options来解析C#命令行程序的命令行参数.它工作正常,除了我希望我的程序退出失败,并显示帮助输出,如果用户包含我没想到的参数.
我正在解析选项:
var options = new OptionSet {
{ "r|reset", "do a reset", r => _reset = r != null },
{ "f|filter=", "add a filter", f => _filter = f },
{ "h|?|help", "show this message and exit", v => _showHelp = v != null },
};
try
{
options.Parse(args);
}
catch (OptionException)
{
_showHelp = true;
return false;
}
return true;
Run Code Online (Sandbox Code Playgroud)
使用这段代码,如果我不正确地使用了一个参数,比如在--filter没有 =myfilter它之后指定,那么NDesk.Options将抛出一个OptionException,一切都会好的.但是,如果我传入一个与我的列表不匹配的参数,我也期望抛出一个OptionException,例如--someOtherArg.但这不会发生.解析器只是忽略了它并继续卡车运输.
有没有办法用NDesk.Options检测意外的args?
jer*_*enh 11
该OptionSet.Parse方法返回a中无法识别的选项List<string>.您可以使用它来报告未知选项.
try
{
var unrecognized = options.Parse(args);
if (unrecognized.Any())
{
foreach (var item in unrecognized)
Console.WriteLine("unrecognized option: {0}", item);
_showHelp = true;
return false;
}
}
catch (OptionException)
{
_showHelp = true;
return false;
}
return true;
Run Code Online (Sandbox Code Playgroud)