我使用
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;
使用此代码,如果我使用不正确的参数,例如在其后指定–filter without = myfilter,则NDesk.Options将抛出OptionException,一切都会好的.但是,如果我传入一个与我的列表不匹配的参数,我也期望抛出一个OptionException,例如–someOtherArg.但这不会发生.解析器只是忽略了它并继续卡车运输.
有没有办法用NDesk.Options检测意外的args?
解决方法
OptionSet.Parse方法返回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;