我使用了这段代码,但我收到编译器警告,说这种创建方法已被弃用。由于我想删除警告,并转到新版本,我想更正代码,但我无法使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);
在线帮助跟不上这个工具,我可以使用任何人可能有的指针。提前感谢。。。
查看源代码,构造函数运行它创建的新设置上传递的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属性也没有出现在我发现的版本中。然而,我相信这个答案也适用于您的版本。