c#CommandLine.Parser-使用接受Action<;Parser设置>;

本文关键字:lt 设置 gt Parser Action Parser- c#CommandLine | 更新日期: 2023-09-27 18:21:18

我使用了这段代码,但我收到编译器警告,说这种创建方法已被弃用。由于我想删除警告,并转到新版本,我想更正代码,但我无法使CommandLineParser 1.9.7库正常工作。

CommandLine.Parser OptionParser = new CommandLine.Parser(new CommandLine.ParserSettings
     {
        CaseSensitive = UseCaseSensitive,
        IgnoreUnknownArguments = IgnoreUnknownOptions,
        MutuallyExclusive = EnableMutuallyExclusive
     }
);
bool Result = OptionParser.ParseArguments(Args, this);

此代码有效,根据命令行的参数和传递的选项,结果将为True/False。但是,发布了以下警告。

Warning 1   'CommandLine.Parser.Parser(CommandLine.ParserSettings)' is obsolete: 'Use constructor that accepts Action<ParserSettings>.' 

联机帮助将其显示为使用该函数的示例。

new CommandLine.Parser(configuration: () => new CommandLine.ParserSettings(Console.Error))

我试着更改代码,但我没有得到正确的Lambda,也不确定如何让它发挥作用。当代码执行时,我只得到默认的函数,我似乎无法更改区分大小写、互斥等选项。

使用构造函数的行(来自内联IDE帮助)

bool Result = new CommandLine.Parser(configuration: (Settings) => new CommandLine.ParserSettings(UseCaseSensitive, EnableMutuallyExclusive, IgnoreUnknownOptions, null)).ParseArguments(Args, this);

使用虚拟设置重试:

bool Result = new CommandLine.Parser(configuration: (Settings) => new CommandLine.ParserSettings
     {
         CaseSensitive = UseCaseSensitive,
         IgnoreUnknownArguments = IgnoreUnknownOptions,
         MutuallyExclusive = EnableMutuallyExclusive
     }
).ParseArguments(Args, this);

在线帮助跟不上这个工具,我可以使用任何人可能有的指针。提前感谢。。。

c#CommandLine.Parser-使用接受Action<;Parser设置>;

查看源代码,构造函数运行它创建的新设置上传递的Action:

public Parser(Action<ParserSettings> configuration)
{
    if (configuration == null) throw new ArgumentNullException("configuration");
    this.settings = new ParserSettings();
    configuration(this.settings);
    this.settings.Consumed = true;
}

因此,在Action<ParserSettings>中,您应该在参数上设置所需的值,而不是创建新的设置(请记住,Action<T>是采用T且不返回值的函数的原型):

var parser = new CommandLine.Parser( s => 
{
    s.CaseSensitive = UseCaseSensitive;
} );

注意:我链接到的源代码似乎与您使用的版本不同,因为在我找到的源代码中,Parser( ParserSettings )被标记为internal,这意味着您甚至无法调用它,而且某些ParserSettings属性也没有出现在我发现的版本中。然而,我相信这个答案也适用于您的版本。