加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用CommandLineParser报告未知参数

发布时间:2020-12-15 05:38:18 所属栏目:百科 来源:网络整理
导读:有没有办法让 Command Line Parser library报告未知参数? 给出以下选项类: public class Options{ [Option('i',"int-option",DefaultValue = 10,HelpText = "Set the int")] public int IntOption { get; set; } [ParserState] public IParserState LastPa
有没有办法让 Command Line Parser library报告未知参数?

给出以下选项类:

public class Options
{
    [Option('i',"int-option",DefaultValue = 10,HelpText = "Set the int")]
    public int IntOption { get; set; }

    [ParserState]
    public IParserState LastParserState { get; set; }

    [HelpOption]
    public string GetUsage()
    {
        return HelpText.AutoBuild(this,HelpText.DefaultParsingErrorsHandler(this,current));
    }
}

以下程序:

var options = new Options();
var parser = new Parser(settings =>
{
    settings.HelpWriter = Console.Error;
    settings.IgnoreUnknownArguments = false;
});

if (parser.ParseArgumentsStrict(args,options))
{
    Console.WriteLine("Int value set: {0}",options.IntOption);
}

使用“MyProgram.exe –unknown”调用程序时
我只是获取了默认的使用信息,但没有提到解析失败的错误.我想向用户提供一些错误的指示.

解决方法

长话短说:使用当前的实现,您无法获得有关未知选项的任何信息.

长篇故事:

如果将一个制动点放入GetUsage方法,您将看到LastParserState不为null但包含0个元素.

LastParserState基本上是从ArgumentParser.PostParsingState填充但是
LongOptionParser(在你的情况下由于 – 双破折号而涉及)不会在其解析方法中向PostParsingState集合添加任何内容:

来自Github的来源:

var parts = argumentEnumerator.Current.Substring(2).Split(new[] { '=' },2);
var option = map[parts[0]];

if (option == null)
{
    return _ignoreUnkwnownArguments ? PresentParserState.MoveOnNextElement : 
                                      PresentParserState.Failure;
}

因此,内部解析器不会存储任何有关错误的信息,只记录该事实.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读