【问题标题】:NDesk.Options - detect invalid argumentsNDesk.Options - 检测无效参数
【发布时间】:2012-06-04 17:08:41
【问题描述】:

我正在使用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 检测意外的参数?

【问题讨论】:

    标签: c# command-line-arguments


    【解决方案1】:

    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;
    

    【讨论】:

    • 这是我遗漏的关键部分。谢谢!
    猜你喜欢
    • 2011-10-19
    • 1970-01-01
    • 2011-06-05
    • 2011-05-01
    • 2016-07-07
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多