NDesk.Options - 检测无效参数

本文关键字:无效 参数 检测 Options NDesk | 更新日期: 2023-09-27 18:35:49

我正在使用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而不在它后面=myfilter,那么 NDesk.Options 将抛出一个 OptionException,一切都会好起来的。 但是,如果我传入与我的列表不匹配的参数,例如 --someOtherArg ,我也希望抛出 OptionException。 但这不会发生。 解析器只是忽略了这一点,继续卡车运输。

有没有办法使用 NDesk.Options 检测意外的参数?

NDesk.Options - 检测无效参数

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;